{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3zazX4_89vkh"
      },
      "source": [
        "# **Druggability Assessment with Fpocket and Machine Learning**\n",
        "\n",
        "\n",
        "\n",
        "Author: Anamika Yadav"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2PmUWo_Gx1Pn"
      },
      "source": [
        "## Table of Contents:\n",
        "* [Introduction](#introduction)\n",
        "  * [Understanding Druggability](#concept)\n",
        "  * [Methods to assess drugabililty](#method)\n",
        "  * [Application of Machine Learning in Druggability Assessment](#application)\n",
        "* [Practical Application of Machine Learning for Druggability Prediction](#classifcation)\n",
        "  * [Building a dataset](#building)\n",
        "  * [Fpocket to idneitfy binding pockets](#fpocket)\n",
        "  * [ML model to classify the binding pockets](#ml)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rOvR5k57e-XR"
      },
      "source": [
        "## **Introduction**\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "iHln1FoDexnc"
      },
      "source": [
        "In this tutorial, we will explore the concept of druggability and its crucial role in identifying successful drug targets. We will then apply a machine learning model to classify drug targets as highly druggable or less druggable, helping us assess the potential of a protein to be effectively targeted by a drug.\n",
        "\n",
        "## Colab\n",
        "\n",
        "This tutorial and the rest in this sequence are designed to be done in Google colab. If you'd like to open this notebook in colab, you can use the following link.\n",
        "\n",
        "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepchem/deepchem/blob/master/examples/tutorials/Druggablity_Assessment_with_Fpocket_and_Machine_Learning.ipynb)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hfZmIdD9zpYJ"
      },
      "source": [
        "\n",
        "### **Understanding  Druggability** <a name=\"concept\"></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "P9uzcC3zUGTg"
      },
      "source": [
        "\n",
        " **Protein Pockets**\n",
        "\n",
        "Protein pockets, also known as binding pockets or active sites, are regions on the surface of a protein where small molecules, such as drugs, can bind. These pockets are formed by the three-dimensional folding of the protein. Protein pockets are characterized by specific amino acids lining the pocket that interact with ligands through various forces, such as hydrogen bonds, hydrophobic interactions, van der Waals forces, and ionic bonds. These pockets are crucial as they can be active sites where catalytic activity occurs, or allosteric sites where binding modulates the protein's function without directly involving the active site.\n",
        "\n",
        "Identifying protein pockets or binding sites on disease-related proteins is essential for selecting targets for new drugs. Once a binding site is known, drugs can be designed to fit precisely into these sites, enhancing their efficacy and reducing side effects. Understanding the binding site helps in modifying drug molecules to increase their affinity and specificity.\n",
        "\n",
        "Binding sites are central to the concept of druggability, as they are the points of interaction between a drug and its target protein. The characteristics of binding sites, such as their geometric and chemical properties, determine whether a protein can be effectively targeted by a drug. By understanding and analyzing these sites, we can identify druggable targets, design and optimize drugs, and predict the druggability of new proteins, ultimately facilitating the development of effective and safe therapeutic agents.\n",
        "\n",
        "To learn more about binding sites, check out this additional DeepChem tutorial on the topic: [Introduction to Binding Sites](https://github.com/deepchem/deepchem/blob/master/examples/tutorials/Introduction_to_Binding_Sites.ipynb)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3KXu51kGdjVS"
      },
      "source": [
        " **Druggability**\n",
        "\n",
        "Druggability is the measure of whether a biological drug target, like a protein, can be effectively targeted and modulated by a drug to treat a disease. It basically refers to how suitable a protein is for being targeted by a drug. Not all proteins are good drug targets. A druggable protein has certain characteristics that make it possible to design a drug to interact with it effectively. For instance, a druggable protein must have accessible and well-defined binding sites or pockets that can interact with drug molecules.\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QQSZW9qGX3N4"
      },
      "source": [
        "![image.png]()\n",
        "\n",
        "Fig. 1: Druggable pocket correspond to a protein region capable of binding a drug-like molecule.([source](https://pockdrug.rpbs.univ-paris-diderot.fr/images/intro_3D.png))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3cg4nh6E1vOt"
      },
      "source": [
        "**Properties of a Druggable Target**\n",
        "\n",
        "Structurally, a druggable target must have well-defined binding pockets where potential drugs can bind. These pockets, identified through techniques like X-ray crystallography or computational modeling, should be of suitable size, shape, and chemical composition to accommodate drug-like molecules.\n",
        "\n",
        "The identification and characterization of binding pockets involve a detailed analysis of their key properties, including volume, hydrophobicity, and the presence of polar residues. The volume of a binding pocket dictates the size of the ligands that can be accommodated, with larger pockets able to bind larger or more complex molecules, offering more points of interaction. However, excessively large pockets can sometimes be less selective, leading to off-target effects. Hydrophobic regions within the binding pocket interact with non-polar parts of drug molecules through van der Waals forces and hydrophobic interactions, crucial for the binding stability of many drugs, particularly those targeting intracellular proteins where the environment is less aqueous. Polar residues within the pocket can form hydrogen bonds and ionic interactions with the drug, which are often key determinants of binding affinity and specificity. The distribution and accessibility of these polar residues are carefully analyzed to optimize drug design.\n",
        "\n",
        "Another critical aspect of binding pockets is their dynamic behavior and flexibility. Binding pockets are not always static; they can undergo conformational changes upon ligand binding. This dynamic behavior, known as induced fit, allows the pocket to better accommodate different ligands, enhancing binding affinity and specificity. Molecular dynamics simulations are particularly useful in studying these conformational changes, providing insights into how flexible pockets can adapt to various drug molecules. Understanding this flexibility is essential for designing drugs that can bind effectively even as the protein changes shape.\n",
        "\n",
        "The balance between hydrophobic and hydrophilic areas within the pocket also influences the type of ligands that can bind effectively. Hydrophobic pockets are better suited for non-polar ligands, while hydrophilic or polar pockets favor ligands that can form hydrogen bonds and ionic interactions. The density and distribution of alpha spheres, geometric constructs used to model the cavities within binding pockets, help in understanding the compactness and accessibility of the pocket. A high alpha sphere density typically indicates a well-defined pocket with the potential for strong ligand interactions. Additionally, the surface area of the pocket, particularly the solvent-accessible surface area (SASA), is crucial as it indicates how much of the pocket is exposed and available for binding, providing further insights into the druggability of the target.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sU3i8HUPVzyI"
      },
      "source": [
        "**Why is Druggability Important?** <a name=\"importance\"></a>\n",
        "\n",
        "\n",
        "Before investing a lot of time and money into developing a new drug, scientists want to ensure that the target they are aiming at has a good chance of responding to a drug. If a target is druggable, it means there's a better chance that a drug can bind to it, affect its function, and ultimately help treat the disease.  This helps prioritize targets that are more likely to lead to successful drug development.\n",
        "\n",
        "Despite decades of experimental investigations in the drug discovery domain, about 96% overall failure rate has been recorded in drug development due to the “undruggability” of various identified disease targets and other challenges.\n",
        "\n",
        "Druggability assessment of a target protein is crucial for several reasons:\n",
        "\n",
        "1. **Prioritizing \"Druggable\" Pockets:**  Not all regions of a promising target protein are suitable for drug binding. Druggability assessment tools, such as fpocket or SiteMap, are employed to identify pockets on the protein surface that are amenable to drug interaction. These pockets should be accessible, possess favorable physicochemical properties (such as hydrophobicity and the presence of hydrogen bond donors/acceptors), and ideally, should not be essential for the protein's normal function to avoid potential side effects if the pocket is targeted by a drug.\n",
        "\n",
        "2. **Reducing Risks of Off-Target Effects:**  Off-target effects occur when a drug interacts with unintended proteins, leading to adverse side effects. By conducting a thorough druggability assessment, researchers can identify target proteins with minimal risk of such interactions. This involves analyzing the protein’s structure and sequence to detect potential promiscuous binding sites that might interact with a broad range of molecules, thereby increasing the risk of off-target effects.\n",
        "\n",
        "3. **Predicting Potential Safety Issues:** Druggability assessment can also highlight potential safety concerns related to targeting specific proteins. For instance, if the target protein shares significant structural or sequence similarity with proteins involved in critical biological processes, inhibiting it could lead to unintended consequences. This consideration is essential to avoid disrupting essential functions that could lead to toxicity or other adverse effects .\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VQZLVlDijG7e"
      },
      "source": [
        "### **Methods for Druggability Assessment** <a name=\"method\"></a>\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xgLHp9lGf69T"
      },
      "source": [
        "\n",
        "\n",
        "Experimental druggability assessments often utilize high-throughput or NMR-based screening with libraries of molecules that exhibit lead-like characteristics. However, the high cost of equipment and the potential for ambiguous results, often due to insufficient compound libraries, limit the effectiveness of these experimental approaches. As a result, computational methods have gained prominence in recent decades, particularly those based on virtual screening and machine learning. These approaches typically involve four primary druggability assessment methods: \n",
        "\n",
        "**1. Sequence-Based Druggability Assessment:**\n",
        "\n",
        "Sequence-based methods analyze the amino acid sequence of a protein to predict its potential as a drug target. The sequence of amino acids determines the protein's function and can reveal conserved regions that may form binding pockets for drugs. This method also provides insights into essential physicochemical properties such as solvent accessibility, hydrophobicity, charge, and polarity.\n",
        "\n",
        "Sequence-based assessments are often used in machine-learning algorithms to predict druggability. They can help identify functional domains within a protein. However, relying solely on sequence data can be limiting, as it does not provide a full picture of the protein's structure or how accessible these domains are to drug molecules.\n",
        "\n",
        "Examples include [CHEMBL](https://www.ebi.ac.uk/chembl/), [LncRNA2Target](https://ngdc.cncb.ac.cn/databasecommons/database/id/27), and [MiRBase](https://www.mirbase.org/), which are databases and tools that aid in predicting druggability based on protein sequences.\n",
        "\n",
        "**2. Structure-Based Druggability Assessment:**\n",
        "\n",
        "Structure-based methods examine the 3D structure of a protein to identify and evaluate potential drug-binding pockets. For a small drug-like molecule to effectively bind, the protein must have a pocket that is appropriately sized, with a deep hydrophobic cavity to encapsulate the drug. Large, exposed polar sites are generally less druggable compared to smaller, more hydrophobic pockets.\n",
        "\n",
        "This method provides a more detailed and reliable prediction compared to sequence-based methods, as it considers the physical characteristics of the protein's binding sites. The identified pockets are then compared against a reference set of known biological targets to assess their druggability.\n",
        "\n",
        "Notable tools include [DOGSiteScorer](https://proteins.plus/help/dogsite), [Metapocket](https://www.liebertpub.com/doi/10.1089/omi.2009.0045), [Fpocket](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-10-168), [PockDrug Server](https://pockdrug.rpbs.univ-paris-diderot.fr/cgi-bin/index.py?page=home), [SiteMap](https://www.schrodinger.com/platform/products/sitemap/), and [Open Targets](https://platform.opentargets.org/), which help identify and analyze potential drug-binding pockets.\n",
        "\n",
        "**3. Ligand-Based Druggability Assessment:**\n",
        "\n",
        "Ligand-based methods focus on the likelihood that a protein can bind to known drug-like molecules, called ligands. By examining endogenous compounds and their interactions with the target, researchers can predict how well a new drug might interact with the protein.\n",
        "\n",
        "This approach leverages existing data on ligands and their binding capabilities, which can provide valuable insights when predicting the druggability of new targets.\n",
        "\n",
        "Examples include [BindingDB](https://www.bindingdb.org/), [PubChem](https://pubchem.ncbi.nlm.nih.gov/), [SwissTargetPrediction](http://www.swisstargetprediction.ch/) and [TargetHunter](https://www.cbligand.org/TargetHunter/), which are comprehensive databases of ligand-protein interactions.\n",
        "\n",
        "**4. Precedence-Based Druggability Assessment:**\n",
        "\n",
        "This method relies on historical data of proteins that have already been successfully targeted by drugs. If a similar protein has proven to be druggable in the past, it is more likely that a new, related target will also be druggable.\n",
        "\n",
        "Precedence-based methods offer the highest confidence in druggability predictions because they are based on proven, established targets. However, while this method provides a strong basis for predicting success, it does not guarantee that new drugs targeting similar proteins will succeed.\n",
        "\n",
        "Databases such as [DrugBank](https://go.drugbank.com/), [ClinicalTrials.gov](https://clinicaltrials.gov/), and [DrugCentral](https://drugcentral.org/) store detailed information on existing drug targets and compounds currently undergoing clinical trials.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-bY_51wPrT44"
      },
      "source": [
        "### **Application of Machine Learning in Druggability Assessment** <a name=\"application\"></a>\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Q8jzA7WZfr54"
      },
      "source": [
        "\n",
        "Machine-learning (ML) based methodologies can handle vast datasets, extract complex patterns, provide more accurate predictions, and reduce human bias, ultimately speeding up the druggability assessment. Various machine learning algorithms have been employed to develop in silico models for the druggability assessment which help to analyse biological data, predict binding site interactions, and identify potential drug target and drug candidates.\n",
        "\n",
        "The ML methods are categorized into supervised and unsupervised learning techniques, each serving different purposes within the drug discovery pipeline.\n",
        "- The supervised learning focuses on tasks where the outcome is known and involves models like decision trees, random forests, SVM, and Bayesian networks for tasks ranging from disease-druggability predictions to target identification.\n",
        "\n",
        "- Unsupervised Learning involves clustering techniques like K-Means, hierarchical clustering, and HMM for tasks like molecular designing and feature selection.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "uRXjPEw4l-ZA"
      },
      "source": [
        "![image.png]()\n",
        "Fig 2 : Methods to predict the druggability based on machine learning ([Source](https://www.excelra.com/whitepaper/identifying-druggable-therapeutic-targets-unveiling-promising-avenues-in-drug-discovery/))\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kOLsO8JZqTAV"
      },
      "source": [
        "**Note:** For information on various ML models, please refer to the ML resources provided at the end of this tutorial. In this section, we will concentrate on the application of ML approaches specifically in druggability assessment.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Fig 2 illustrates how various AI and machine learning (ML) techniques are applied in the assessment of druggability.\n",
        "\n",
        "In Supervised Learning, models like Decision Trees and Random Forest are used to predict the druggability of a target, such as a protein involved in a disease. These models can also predict the disease-drug response, which helps determine how well a drug might work in treating a specific disease. Classification methods, like Nearest Neighbour and SVM (Support Vector Machine), are used for drug target association, identifying which drugs are likely to interact with which targets. NLP (Natural Language Processing) helps analyze vast amounts of scientific literature to uncover potential drug targets, while Bayesian Networks assist in target identification, pinpointing which proteins or molecules are the best candidates for drug development.\n",
        "\n",
        "Unsupervised Learning focuses on Clustering techniques, such as K-Means and Hierarchical Clustering, which group similar molecules or biological data together. This is crucial for molecular designing, where scientists design new drugs based on the properties of these clusters. Hidden Markov Models (HMM) are used for feature selection, identifying the most important characteristics of a protein that determine its druggability."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vZdDO-krnoWS"
      },
      "source": [
        "**Application ML and AI based approaches in different Druggability Assessment methods:**\n",
        "\n",
        "\n",
        "**1. Sequence-Based Druggability Assessment:**\n",
        "- Supervised Learning:\n",
        "Nearest Neighbour, SVM, and Random Forest can be used to predict the druggability of a target based on its sequence features (like amino acid composition and conserved regions).\n",
        "NLP techniques can process and extract relevant information from genetic databases or literature to predict potential binding sites based on sequence data.\n",
        "- Unsupervised Learning :\n",
        "Hierarchical Clustering and K-Means can group protein sequences into clusters based on their similarities, which helps in identifying conserved regions or sequence motifs linked to druggability.\n",
        "\n",
        "**2. Structure-Based Druggability Assessment:**\n",
        "- Supervised Learning:\n",
        "Decision Trees and Bayesian Networks can predict whether specific structural features (like the size and hydrophobicity of binding pockets) make a protein druggable.\n",
        "Random Forest models can aggregate predictions about various structural features to give a more accurate overall assessment.\n",
        "- Unsupervised Learning:\n",
        "Hidden Markov Models (HMMs) can model protein structural dynamics and predict how likely a given binding site is to interact with a drug.\n",
        "K-Means clustering can identify common structural features across different proteins that correlate with druggability.\n",
        "\n",
        "**3. Ligand-Based Druggability Assessment:**\n",
        "- Supervised Learning:\n",
        "SVM and NLP can be used to predict drug-target associations by analyzing known ligands and their binding affinities with various proteins.\n",
        "Random Forest models can improve the accuracy of these predictions by considering multiple ligand features simultaneously.\n",
        "- Unsupervised Learning:\n",
        "K-Means and Hierarchical Clustering can group ligands based on their chemical properties, aiding in the identification of new ligand-based druggable targets.\n",
        "\n",
        "**4. Precedence-Based Druggability Assessment:**\n",
        "- Supervised Learning:\n",
        "Bayesian Networks and Decision Trees can help in predicting the success of new targets by analyzing previous data on established drug targets and their associated compounds.\n",
        "Random Forests can combine different data points from established targets to predict the druggability of new, similar targets.\n",
        "- Unsupervised Learning:\n",
        "HMMs can be used to model the progression of drug development for targets with existing precedents, helping in feature selection and identifying key characteristics of successful targets."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "p2wspzN-322j"
      },
      "source": [
        "## **Practical Application of Machine Learning for Druggability Prediction** <a name=\"classifcation\"></a>\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "26KfpXssuw2i"
      },
      "source": [
        "With a solid understanding of druggability and the application of machine learning (ML) in druggability assessment, we are now ready to conduct an experiment to classify protein targets into 'highly druggable' and 'less druggable' categories using a Random Forest model.\n",
        "\n",
        "Our dataset consists of proteins paired with their corresponding druggability labels - 'highly druggable' and 'less druggable'. To identify the druggable pockets within these proteins, we’ll utilize Fpocket, a structure-based druggability assessment tool. Fpocket excels at identifying and characterizing pockets on the surface of proteins, which are potential binding sites for small molecules. These pockets are key regions where drug molecules might interact with the protein to exert a therapeutic effect.\n",
        "\n",
        "\n",
        "\n",
        "The experiment involves two primary steps:\n",
        "\n",
        "1. **Identifying Druggable Pockets**: Using [Fpocket](https://github.com/Discngine/fpocket), we will analyze the protein structures to find pockets that might serve as effective binding sites for small molecules. Fpocket evaluates various characteristics of these pockets, such as size, shape, depth, and hydrophobicity, which are crucial indicators of druggability.\n",
        "\n",
        "2. **Training the Random Forest Model**: Once we have characterized the pockets, the Random Forest model will be trained on these features along with the corresponding druggability labels.  [Random Forest](https://towardsdatascience.com/random-forest-classification-678e551462f5) is a machine learning algorithm that uses multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone. It operates by constructing a multitude of [decision trees](https://en.wikipedia.org/wiki/Decision_tree) during training and outputs either the mode of the classes (for classification) or the mean prediction (for regression) of the individual trees. The algorithm improves the accuracy and robustness of predictions by averaging the results from multiple decision trees, reducing the risk of overfitting and handling complex data with higher reliability. The model will learn to distinguish between 'highly druggable' and 'less druggable' pockets based on the patterns it identifies in the training data. After training, the model can classify new protein pockets as either highly druggable or less druggable with a high degree of accuracy.\n",
        "\n",
        "While this model will provide valuable insights into whether a protein pocket is likely to be druggable, it’s crucial to remember that druggability is just one aspect of a protein’s potential as a drug target. Other important factors to consider include:\n",
        "- Biological Relevance: The role of the protein in disease processes and whether modulating this protein will have a therapeutic effect.\n",
        "- Feasibility: Practical considerations such as how easily a drug can reach the target protein in the body, and whether the protein is expressed in the right tissues at the right levels.\n",
        "- Off-target effects: The potential for off-target effects and toxicity, which could arise if the protein is similar to other essential proteins in the body."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_wDnj9in4G_g"
      },
      "source": [
        "### **Building the Dataset** <a name=\"building\"></a>\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_Rh955PY4Qhx"
      },
      "source": [
        "In this tutorial we'll use the NRLD dataset which has been widely used to study the druggability. It is a comprehensive, nonredundant data set containing crystal structures of 71 highly druggable and 44 less druggable proteins  compiled by literature search and data mining published in the paper : [DrugPred: A Structure-Based Approach To Predict Protein Druggability Developed Using an Extensive Nonredundant Data Set](https://pubs.acs.org/doi/10.1021/ci200266d)\n",
        "\n",
        "The authors have only published the list of PDB code along with the labels. So, we'll first fetch the protein structure using Biopython. The labels are **'D'** for highly druggable and **'N'** for less druggable protein targets.\n",
        "\n",
        "You can also use your own dataset if you have the labels. To obtain the structure of protein from your dataset you can refer the DeepChem tutorial: [Protein Structure Prediction with ESMFold](https://github.com/deepchem/deepchem/blob/master/examples/tutorials/Protein_Structure_Prediction_with_ESMFold.ipynb)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GgpouqTCvRV1",
        "outputId": "95165d48-d9ea-48ed-893b-681a2f29138b"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Collecting biopython\n",
            "  Downloading biopython-1.84-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from biopython) (1.25.2)\n",
            "Downloading biopython-1.84-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.2/3.2 MB\u001b[0m \u001b[31m23.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hInstalling collected packages: biopython\n",
            "Successfully installed biopython-1.84\n"
          ]
        }
      ],
      "source": [
        "!pip install biopython"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Yfq6dzBrY1sJ"
      },
      "outputs": [],
      "source": [
        "proteins_list = ['1pwm', '1lox', '3etr', '3f1q', '3ia4', '2cl5', '1uou', '1t46', '1unl', '1q41', '2i1m', '1pmn', '1fk9', '1e66', '1xoz', '1owe', '1r55', '3f0r', '1oq5', '1kzn', '2aa2', '3b68', '1sqn', '1v16', '3jdw', '1ajs', '1wvc', '1kc7', '1mai', '1px4', '1od8', '1bmq', '1bls', '1m0n', '1ec9', '1b74', '1g98', '1e9x', '1hw8', '1sqi', '1r9o', '4cox', '1c14', '2bxr', '2gh5', '1hvy', '1rsz', '1n2v', '1v4s', '1u4d', '1m17', '2dq7', '1qpe', '1qhi', '2fb8', '1ke6', '2br1', '1ywr', '2ivu', '2hiw', '2i0e', '1ywn', '1ig3', '1yvf', '1k8q', '1kvo', '1xm6', '1udt', '1u30', '1r58', '1rwq', '1lpz', '2g24', '1hvr', '1gkc', '1yqy', '1o5r', '1js3', '1k7f', '1j4i', '1vbm', '1rv1', '1gwr', '1m2z', '3d4s', '1ai2', '3pcm', '1d09', '1c9y', '1gpu', '1qmf', '1moq', '1ucn', '1t03', '1qs4', '1fth', '1rnt', '1onz', '1x9d', '1nnc', '1olq', '1jak', '1kts', '1nlj', '1icj', '1hqg', '2gsu', '1g7v', '1f9g', '1qxo', '2gyi', '1o8b', '1cg0']\n",
        "labels = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "NAe-6JJ59v-x"
      },
      "outputs": [],
      "source": [
        "from Bio.PDB import PDBList\n",
        "from Bio.PDB import PDBParser\n",
        "import os\n",
        "import pandas as pd\n",
        "\n",
        "\n",
        "def fetch_protein_structure(pdb_code, save_dir):\n",
        "    \"\"\"\n",
        "    Fetches the protein structure for a given PDB code and saves it to the specified directory.\n",
        "    Also returns the structure in a dictionary with the PDB code as the key.\n",
        "\n",
        "    Parameters:\n",
        "    pdb_code (str): The PDB code of the protein structure to fetch.\n",
        "    save_dir (str): The directory where the PDB file will be saved.\n",
        "\n",
        "    Returns:\n",
        "    dict: A dictionary with the PDB code as the key and the structure as the value.\n",
        "    \"\"\"\n",
        "    try:\n",
        "        if not os.path.exists(save_dir):\n",
        "            os.makedirs(save_dir)\n",
        "        pdbl = PDBList()\n",
        "        # Retrieve the PDB file and save it with a .pdb extension\n",
        "        pdb_file_path = pdbl.retrieve_pdb_file(pdb_code, pdir=save_dir, file_format='pdb')\n",
        "        new_pdb_file_path = os.path.join(save_dir, f\"{pdb_code}.pdb\")\n",
        "        os.rename(pdb_file_path, new_pdb_file_path)\n",
        "\n",
        "        # Parse the PDB file\n",
        "        parser = PDBParser(PERMISSIVE=1)\n",
        "        structure = parser.get_structure(pdb_code, new_pdb_file_path)\n",
        "\n",
        "        # Return the structure in a dictionary\n",
        "        return {pdb_code: structure}\n",
        "\n",
        "    except Exception as e:\n",
        "        print(f'Error fetching structure for PDB code {pdb_code}: {e}')\n",
        "        return {pdb_code: None}\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1bZygiPU_z68"
      },
      "source": [
        "Specify the save directory and fetch the protein structure"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "lqrHwQrB_u58"
      },
      "outputs": [],
      "source": [
        "save_directory = '/content/pdb_files/'\n",
        "\n",
        "for protein in proteins_list:\n",
        "  pdb_code = protein\n",
        "  pdb_file_path = fetch_protein_structure(pdb_code, save_directory)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sDqCdAAp-hkF"
      },
      "source": [
        "### **Fpocket to find the binding pockets** <a name=\"fpocket\"></a>\n",
        "\n",
        "Fpocket is a computational tool used to identify and characterize pockets on the surface of proteins. These pockets are potential binding sites for small molecules, making fpocket a valuable tool for drug discovery and development. By identifying and analyzing these pockets, we can better understand protein function and identify targets for drug design."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KgppXVD68sIU"
      },
      "source": [
        "#### Install the requirements"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ViNcmykAvBMe",
        "outputId": "0d198fff-dc82-4018-918c-edbe25038134"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Reading package lists... Done\n",
            "Building dependency tree... Done\n",
            "Reading state information... Done\n",
            "build-essential is already the newest version (12.9ubuntu3).\n",
            "git is already the newest version (1:2.34.1-1ubuntu1.11).\n",
            "0 upgraded, 0 newly installed, 0 to remove and 45 not upgraded.\n",
            "Cloning into 'fpocket'...\n",
            "remote: Enumerating objects: 11316, done.\u001b[K\n",
            "remote: Counting objects: 100% (5152/5152), done.\u001b[K\n",
            "remote: Compressing objects: 100% (1379/1379), done.\u001b[K\n",
            "remote: Total 11316 (delta 3897), reused 4572 (delta 3764), pack-reused 6164\u001b[K\n",
            "Receiving objects: 100% (11316/11316), 127.93 MiB | 21.88 MiB/s, done.\n",
            "Resolving deltas: 100% (7346/7346), done.\n",
            "Updating files: 100% (3895/3895), done.\n",
            "/content/fpocket\n",
            "cd src/qhull/ && make\n",
            "make[1]: Entering directory '/content/fpocket/src/qhull'\n",
            "mkdir -p bin lib\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/rbox/rbox.o src/rbox/rbox.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/global.o src/libqhull/global.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/stat.o src/libqhull/stat.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/geom2.o src/libqhull/geom2.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/poly2.o src/libqhull/poly2.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly2.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_delridge\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly2.c:1127:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1127 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/merge.o src/libqhull/merge.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_all_merges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:219:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  219 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;  /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_appendmergeset\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:322:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  322 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_mergecycle_ridges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/merge.c:2091:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 2091 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/libqhull.o src/libqhull/libqhull.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/geom.o src/libqhull/geom.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/geom.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_projectpoint\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/geom.c:897:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  897 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/geom.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setfacetplane\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/geom.c:935:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  935 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/poly.o src/libqhull/poly.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_delfacet\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:248:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  248 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_makenew_nonsimplicial\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:564:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  564 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_newfacet\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:987:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  987 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_newridge\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/poly.c:1020:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1020 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;   /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/qset.o src/libqhull/qset.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/qset.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setfree\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/qset.c:718:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  718 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;  /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/qset.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setnew\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/qset.c:928:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  928 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/mem.o src/libqhull/mem.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/random.o src/libqhull/random.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull/random.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_argv_to_command\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/random.c:84:6:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis ‘\u001b[01m\u001b[Kelse\u001b[m\u001b[K’ clause does not guard... [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation\u0007-Wmisleading-indentation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   84 |     }\u001b[01;35m\u001b[Kelse\u001b[m\u001b[K\n",
            "      |      \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/random.c:86:7:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K...this statement, but the latter is misleadingly indented as if it were guarded by the ‘\u001b[01m\u001b[Kelse\u001b[m\u001b[K’\n",
            "   86 |       \u001b[01;36m\u001b[Kstrcat\u001b[m\u001b[K(command, s);\n",
            "      |       \u001b[01;36m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/usermem.o src/libqhull/usermem.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/userprintf.o src/libqhull/userprintf.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/io.o src/libqhull/io.c\n",
            "In file included from \u001b[01m\u001b[Ksrc/libqhull/libqhull.h:38\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull/qhull_a.h:28\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull/io.c:21\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/io.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_printfacetridges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/qset.h:138:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis ‘\u001b[01m\u001b[Kfor\u001b[m\u001b[K’ clause does not guard... [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation\u0007-Wmisleading-indentation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  138 |         if (((variable= NULL), set)) \u001b[01;35m\u001b[Kfor\u001b[m\u001b[K (\\\n",
            "      |                                      \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/libqhull.h:936:34:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kin expansion of macro ‘\u001b[01m\u001b[KFOREACHsetelement_\u001b[m\u001b[K’\n",
            "  936 | #define FOREACHridge_(ridges)    \u001b[01;36m\u001b[KFOREACHsetelement_\u001b[m\u001b[K(ridgeT, ridges, ridge)\n",
            "      |                                  \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/io.c:2622:7:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kin expansion of macro ‘\u001b[01m\u001b[KFOREACHridge_\u001b[m\u001b[K’\n",
            " 2622 |       \u001b[01;36m\u001b[KFOREACHridge_\u001b[m\u001b[K(facet->ridges)\n",
            "      |       \u001b[01;36m\u001b[K^~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/io.c:2624:9:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K...this statement, but the latter is misleadingly indented as if it were guarded by the ‘\u001b[01m\u001b[Kfor\u001b[m\u001b[K’\n",
            " 2624 |         \u001b[01;36m\u001b[Kqh_fprintf\u001b[m\u001b[K(fp, 9185, \"\\n\");\n",
            "      |         \u001b[01;36m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/user.o src/libqhull/user.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/rboxlib.o src/libqhull/rboxlib.c\n",
            "In file included from \u001b[01m\u001b[K/usr/include/string.h:535\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:22\u001b[m\u001b[K:\n",
            "In function ‘\u001b[01m\u001b[Kstrncat\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kqh_rboxpoints\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:385:5\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/string_fortified.h:138:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___strncat_chk\u001b[m\u001b[K’ output may be truncated copying between 0 and 199 bytes from a string of length 199 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wstringop-truncation\u0007-Wstringop-truncation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  138 |   return \u001b[01;35m\u001b[K__builtin___strncat_chk (__dest, __src, __len,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  139 | \u001b[01;35m\u001b[K                                  __glibc_objsize (__dest))\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_rboxpoints\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:93:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentcount\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   93 |   int \u001b[01;35m\u001b[Kcoincidentcount\u001b[m\u001b[K=0, coincidenttotal=0, coincidentpoints=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:93:45:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   93 |   int coincidentcount=0, coincidenttotal=0, \u001b[01;35m\u001b[Kcoincidentpoints\u001b[m\u001b[K=0;\n",
            "      |                                             \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:94:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kseed\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   94 |   int cubesize, diamondsize, \u001b[01;35m\u001b[Kseed\u001b[m\u001b[K=0, count, apex;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:95:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kdim\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   95 |   int \u001b[01;35m\u001b[Kdim\u001b[m\u001b[K=3, numpoints=0, totpoints, addpoints=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:95:14:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Knumpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   95 |   int dim=3, \u001b[01;35m\u001b[Knumpoints\u001b[m\u001b[K=0, totpoints, addpoints=0;\n",
            "      |              \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:95:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kaddpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   95 |   int dim=3, numpoints=0, totpoints, \u001b[01;35m\u001b[Kaddpoints\u001b[m\u001b[K=0;\n",
            "      |                                      \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissphere\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int \u001b[01;35m\u001b[Kissphere\u001b[m\u001b[K=0, isaxis=0,  iscdd=0, islens=0, isregular=0, iswidth=0, addcube=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:19:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisaxis\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, \u001b[01;35m\u001b[Kisaxis\u001b[m\u001b[K=0,  iscdd=0, islens=0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                   \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kiscdd\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, isaxis=0,  \u001b[01;35m\u001b[Kiscdd\u001b[m\u001b[K=0, islens=0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:39:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kislens\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, isaxis=0,  iscdd=0, \u001b[01;35m\u001b[Kislens\u001b[m\u001b[K=0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                                       \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:49:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisregular\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, isaxis=0,  iscdd=0, islens=0, \u001b[01;35m\u001b[Kisregular\u001b[m\u001b[K=0, iswidth=0, addcube=0;\n",
            "      |                                                 \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:62:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kiswidth\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, isaxis=0,  iscdd=0, islens=0, isregular=0, \u001b[01;35m\u001b[Kiswidth\u001b[m\u001b[K=0, addcube=0;\n",
            "      |                                                              \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:96:73:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kaddcube\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   96 |   int issphere=0, isaxis=0,  iscdd=0, islens=0, isregular=0, iswidth=0, \u001b[01;35m\u001b[Kaddcube\u001b[m\u001b[K=0;\n",
            "      |                                                                         \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:97:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisspiral\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   97 |   int isgap=0, \u001b[01;35m\u001b[Kisspiral\u001b[m\u001b[K=0, NOcommand=0, adddiamond=0;\n",
            "      |                \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:97:28:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[KNOcommand\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   97 |   int isgap=0, isspiral=0, \u001b[01;35m\u001b[KNOcommand\u001b[m\u001b[K=0, adddiamond=0;\n",
            "      |                            \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:97:41:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kadddiamond\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   97 |   int isgap=0, isspiral=0, NOcommand=0, \u001b[01;35m\u001b[Kadddiamond\u001b[m\u001b[K=0;\n",
            "      |                                         \u001b[01;35m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:98:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisrandom\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   98 |   int \u001b[01;35m\u001b[Kisrandom\u001b[m\u001b[K=0, istime=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:98:19:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kistime\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   98 |   int israndom=0, \u001b[01;35m\u001b[Kistime\u001b[m\u001b[K=0;\n",
            "      |                   \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:99:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisbox\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   99 |   int \u001b[01;35m\u001b[Kisbox\u001b[m\u001b[K=0, issimplex=0, issimplex2=0, ismesh=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:99:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissimplex\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   99 |   int isbox=0, \u001b[01;35m\u001b[Kissimplex\u001b[m\u001b[K=0, issimplex2=0, ismesh=0;\n",
            "      |                \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:99:29:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissimplex2\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   99 |   int isbox=0, issimplex=0, \u001b[01;35m\u001b[Kissimplex2\u001b[m\u001b[K=0, ismesh=0;\n",
            "      |                             \u001b[01;35m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:99:43:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kismesh\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   99 |   int isbox=0, issimplex=0, issimplex2=0, \u001b[01;35m\u001b[Kismesh\u001b[m\u001b[K=0;\n",
            "      |                                           \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:100:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kwidth\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  100 |   double \u001b[01;35m\u001b[Kwidth\u001b[m\u001b[K=0.0, gap=0.0, radius=0.0, coincidentradius=0.0;\n",
            "      |          \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:100:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kradius\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  100 |   double width=0.0, gap=0.0, \u001b[01;35m\u001b[Kradius\u001b[m\u001b[K=0.0, coincidentradius=0.0;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:100:42:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentradius\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  100 |   double width=0.0, gap=0.0, radius=0.0, \u001b[01;35m\u001b[Kcoincidentradius\u001b[m\u001b[K=0.0;\n",
            "      |                                          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:101:33:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshm\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  101 |   double coord[MAXdim], offset, \u001b[01;35m\u001b[Kmeshm\u001b[m\u001b[K=3.0, meshn=4.0, meshr=5.0;\n",
            "      |                                 \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:101:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshn\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  101 |   double coord[MAXdim], offset, meshm=3.0, \u001b[01;35m\u001b[Kmeshn\u001b[m\u001b[K=4.0, meshr=5.0;\n",
            "      |                                            \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:101:55:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshr\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  101 |   double coord[MAXdim], offset, meshm=3.0, meshn=4.0, \u001b[01;35m\u001b[Kmeshr\u001b[m\u001b[K=5.0;\n",
            "      |                                                       \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:102:20:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Ksimplex\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  102 |   double *coordp, *\u001b[01;35m\u001b[Ksimplex\u001b[m\u001b[K= NULL, *simplexp;\n",
            "      |                    \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:104:39:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Klensangle\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  104 |   double norm, factor, randr, rangap, \u001b[01;35m\u001b[Klensangle\u001b[m\u001b[K=0, lensbase=1;\n",
            "      |                                       \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:104:52:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Klensbase\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  104 |   double norm, factor, randr, rangap, lensangle=0, \u001b[01;35m\u001b[Klensbase\u001b[m\u001b[K=1;\n",
            "      |                                                    \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:105:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcube\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   double anglediff, angle, x, y, \u001b[01;35m\u001b[Kcube\u001b[m\u001b[K=0.0, diamond=0.0;\n",
            "      |                                  \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:105:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kdiamond\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   double anglediff, angle, x, y, cube=0.0, \u001b[01;35m\u001b[Kdiamond\u001b[m\u001b[K=0.0;\n",
            "      |                                            \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:106:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kbox\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  106 |   double \u001b[01;35m\u001b[Kbox\u001b[m\u001b[K= qh_DEFAULTbox; /* scale all numbers before output */\n",
            "      |          \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull/rboxlib.c:109:26:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfirst_point\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  109 |   char *s= command, *t, *\u001b[01;35m\u001b[Kfirst_point\u001b[m\u001b[K= NULL;\n",
            "      |                          \u001b[01;35m\u001b[K^~~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic/userprintf_rbox.o src/libqhull/userprintf_rbox.c\n",
            "==========================================\n",
            "==== If ar fails, try make qhullx ====\n",
            "==========================================\n",
            "ar -rs lib/libqhullstatic.a src/libqhullstatic/global.o src/libqhullstatic/stat.o src/libqhullstatic/geom2.o src/libqhullstatic/poly2.o src/libqhullstatic/merge.o src/libqhullstatic/libqhull.o src/libqhullstatic/geom.o src/libqhullstatic/poly.o src/libqhullstatic/qset.o src/libqhullstatic/mem.o src/libqhullstatic/random.o src/libqhullstatic/usermem.o src/libqhullstatic/userprintf.o src/libqhullstatic/io.o src/libqhullstatic/user.o src/libqhullstatic/rboxlib.o src/libqhullstatic/userprintf_rbox.o\n",
            "ar: creating lib/libqhullstatic.a\n",
            "#If 'ar -rs' fails try using 'ar -s' with 'ranlib'\n",
            "#ranlib lib/libqhullstatic.a\n",
            "gcc -o bin/rbox src/rbox/rbox.o -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -Llib -lqhullstatic -lm\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/qdelaunay/qdelaun.o src/qdelaunay/qdelaun.c\n",
            "gcc -o bin/qdelaunay src/qdelaunay/qdelaun.o -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -Llib -lqhullstatic -lm\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/qhalf/qhalf.o src/qhalf/qhalf.c\n",
            "gcc -o bin/qhalf src/qhalf/qhalf.o -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -Llib -lqhullstatic -lm\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/qhull/unix_r.o src/qhull/unix_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/global_r.o src/libqhull_r/global_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/stat_r.o src/libqhull_r/stat_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/geom2_r.o src/libqhull_r/geom2_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/poly2_r.o src/libqhull_r/poly2_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly2_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_delridge\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly2_r.c:1127:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1127 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/merge_r.o src/libqhull_r/merge_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_all_merges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:219:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  219 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;  /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_appendmergeset\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:322:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  322 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_mergecycle_ridges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/merge_r.c:2090:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 2090 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/libqhull_r.o src/libqhull_r/libqhull_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/geom_r.o src/libqhull_r/geom_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/geom_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_projectpoint\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/geom_r.c:897:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  897 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/geom_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setfacetplane\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/geom_r.c:935:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  935 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/poly_r.o src/libqhull_r/poly_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_delfacet\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:248:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  248 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_makenew_nonsimplicial\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:564:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  564 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_newfacet\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:987:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  987 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_newridge\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/poly_r.c:1020:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1020 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;   /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/qset_r.o src/libqhull_r/qset_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/qset_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setfree\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/qset_r.c:718:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  718 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K;  /* used if !qh_NOmem by qh_memfree_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/qset_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_setnew\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/qset_r.c:928:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfreelistp\u001b[m\u001b[K’ set but not used [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable\u0007-Wunused-but-set-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  928 |   void **\u001b[01;35m\u001b[Kfreelistp\u001b[m\u001b[K; /* used if !qh_NOmem by qh_memalloc_() */\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/mem_r.o src/libqhull_r/mem_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/random_r.o src/libqhull_r/random_r.c\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/random_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_argv_to_command\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/random_r.c:84:6:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis ‘\u001b[01m\u001b[Kelse\u001b[m\u001b[K’ clause does not guard... [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation\u0007-Wmisleading-indentation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   84 |     }\u001b[01;35m\u001b[Kelse\u001b[m\u001b[K\n",
            "      |      \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/random_r.c:86:7:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K...this statement, but the latter is misleadingly indented as if it were guarded by the ‘\u001b[01m\u001b[Kelse\u001b[m\u001b[K’\n",
            "   86 |       \u001b[01;36m\u001b[Kstrcat\u001b[m\u001b[K(command, s);\n",
            "      |       \u001b[01;36m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/usermem_r.o src/libqhull_r/usermem_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/userprintf_r.o src/libqhull_r/userprintf_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/io_r.o src/libqhull_r/io_r.c\n",
            "In file included from \u001b[01m\u001b[Ksrc/libqhull_r/libqhull_r.h:32\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull_r/qhull_ra.h:28\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull_r/io_r.c:21\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/io_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_printfacetridges\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/qset_r.h:143:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis ‘\u001b[01m\u001b[Kfor\u001b[m\u001b[K’ clause does not guard... [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation\u0007-Wmisleading-indentation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  143 |         if (((variable= NULL), set)) \u001b[01;35m\u001b[Kfor\u001b[m\u001b[K (\\\n",
            "      |                                      \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/libqhull_r.h:926:34:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kin expansion of macro ‘\u001b[01m\u001b[KFOREACHsetelement_\u001b[m\u001b[K’\n",
            "  926 | #define FOREACHridge_(ridges)    \u001b[01;36m\u001b[KFOREACHsetelement_\u001b[m\u001b[K(ridgeT, ridges, ridge)\n",
            "      |                                  \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/io_r.c:2622:7:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kin expansion of macro ‘\u001b[01m\u001b[KFOREACHridge_\u001b[m\u001b[K’\n",
            " 2622 |       \u001b[01;36m\u001b[KFOREACHridge_\u001b[m\u001b[K(facet->ridges)\n",
            "      |       \u001b[01;36m\u001b[K^~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/io_r.c:2624:9:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K...this statement, but the latter is misleadingly indented as if it were guarded by the ‘\u001b[01m\u001b[Kfor\u001b[m\u001b[K’\n",
            " 2624 |         \u001b[01;36m\u001b[Kqh_fprintf\u001b[m\u001b[K(qh, fp, 9185, \"\\n\");\n",
            "      |         \u001b[01;36m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/user_r.o src/libqhull_r/user_r.c\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/rboxlib_r.o src/libqhull_r/rboxlib_r.c\n",
            "In file included from \u001b[01m\u001b[K/usr/include/string.h:535\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:22\u001b[m\u001b[K:\n",
            "In function ‘\u001b[01m\u001b[Kstrncat\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kqh_rboxpoints\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:358:5\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/string_fortified.h:138:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___strncat_chk\u001b[m\u001b[K’ output may be truncated copying between 0 and 199 bytes from a string of length 199 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wstringop-truncation\u0007-Wstringop-truncation\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  138 |   return \u001b[01;35m\u001b[K__builtin___strncat_chk (__dest, __src, __len,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  139 | \u001b[01;35m\u001b[K                                  __glibc_objsize (__dest))\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kqh_rboxpoints\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:75:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentcount\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   75 |   int \u001b[01;35m\u001b[Kcoincidentcount\u001b[m\u001b[K=0, coincidenttotal=0, coincidentpoints=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:75:45:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   75 |   int coincidentcount=0, coincidenttotal=0, \u001b[01;35m\u001b[Kcoincidentpoints\u001b[m\u001b[K=0;\n",
            "      |                                             \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:76:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kseed\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   76 |   int cubesize, diamondsize, \u001b[01;35m\u001b[Kseed\u001b[m\u001b[K=0, count, apex;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:77:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kdim\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   77 |   int \u001b[01;35m\u001b[Kdim\u001b[m\u001b[K=3 , numpoints= 0, totpoints, addpoints=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:77:15:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Knumpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   77 |   int dim=3 , \u001b[01;35m\u001b[Knumpoints\u001b[m\u001b[K= 0, totpoints, addpoints=0;\n",
            "      |               \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:77:40:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kaddpoints\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   77 |   int dim=3 , numpoints= 0, totpoints, \u001b[01;35m\u001b[Kaddpoints\u001b[m\u001b[K=0;\n",
            "      |                                        \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissphere\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int \u001b[01;35m\u001b[Kissphere\u001b[m\u001b[K=0, isaxis=0,  iscdd= 0, islens= 0, isregular=0, iswidth=0, addcube=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:19:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisaxis\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, \u001b[01;35m\u001b[Kisaxis\u001b[m\u001b[K=0,  iscdd= 0, islens= 0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                   \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kiscdd\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, isaxis=0,  \u001b[01;35m\u001b[Kiscdd\u001b[m\u001b[K= 0, islens= 0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:40:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kislens\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, isaxis=0,  iscdd= 0, \u001b[01;35m\u001b[Kislens\u001b[m\u001b[K= 0, isregular=0, iswidth=0, addcube=0;\n",
            "      |                                        \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:51:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisregular\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, isaxis=0,  iscdd= 0, islens= 0, \u001b[01;35m\u001b[Kisregular\u001b[m\u001b[K=0, iswidth=0, addcube=0;\n",
            "      |                                                   \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:64:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kiswidth\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, isaxis=0,  iscdd= 0, islens= 0, isregular=0, \u001b[01;35m\u001b[Kiswidth\u001b[m\u001b[K=0, addcube=0;\n",
            "      |                                                                \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:78:75:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kaddcube\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   78 |   int issphere=0, isaxis=0,  iscdd= 0, islens= 0, isregular=0, iswidth=0, \u001b[01;35m\u001b[Kaddcube\u001b[m\u001b[K=0;\n",
            "      |                                                                           \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:79:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisspiral\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   79 |   int isgap=0, \u001b[01;35m\u001b[Kisspiral\u001b[m\u001b[K=0, NOcommand= 0, adddiamond=0;\n",
            "      |                \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:79:28:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[KNOcommand\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   79 |   int isgap=0, isspiral=0, \u001b[01;35m\u001b[KNOcommand\u001b[m\u001b[K= 0, adddiamond=0;\n",
            "      |                            \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:79:42:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kadddiamond\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   79 |   int isgap=0, isspiral=0, NOcommand= 0, \u001b[01;35m\u001b[Kadddiamond\u001b[m\u001b[K=0;\n",
            "      |                                          \u001b[01;35m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:80:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisrandom\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   80 |   int \u001b[01;35m\u001b[Kisrandom\u001b[m\u001b[K=0, istime=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:80:19:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kistime\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   80 |   int israndom=0, \u001b[01;35m\u001b[Kistime\u001b[m\u001b[K=0;\n",
            "      |                   \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:81:7:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kisbox\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   81 |   int \u001b[01;35m\u001b[Kisbox\u001b[m\u001b[K=0, issimplex=0, issimplex2=0, ismesh=0;\n",
            "      |       \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:81:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissimplex\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   81 |   int isbox=0, \u001b[01;35m\u001b[Kissimplex\u001b[m\u001b[K=0, issimplex2=0, ismesh=0;\n",
            "      |                \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:81:29:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kissimplex2\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   81 |   int isbox=0, issimplex=0, \u001b[01;35m\u001b[Kissimplex2\u001b[m\u001b[K=0, ismesh=0;\n",
            "      |                             \u001b[01;35m\u001b[K^~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:81:43:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kismesh\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   81 |   int isbox=0, issimplex=0, issimplex2=0, \u001b[01;35m\u001b[Kismesh\u001b[m\u001b[K=0;\n",
            "      |                                           \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:82:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kwidth\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   82 |   double \u001b[01;35m\u001b[Kwidth\u001b[m\u001b[K=0.0, gap=0.0, radius=0.0, coincidentradius=0.0;\n",
            "      |          \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:82:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kradius\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   82 |   double width=0.0, gap=0.0, \u001b[01;35m\u001b[Kradius\u001b[m\u001b[K=0.0, coincidentradius=0.0;\n",
            "      |                              \u001b[01;35m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:82:42:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcoincidentradius\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   82 |   double width=0.0, gap=0.0, radius=0.0, \u001b[01;35m\u001b[Kcoincidentradius\u001b[m\u001b[K=0.0;\n",
            "      |                                          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:83:33:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshm\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   83 |   double coord[MAXdim], offset, \u001b[01;35m\u001b[Kmeshm\u001b[m\u001b[K=3.0, meshn=4.0, meshr=5.0;\n",
            "      |                                 \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:83:44:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshn\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   83 |   double coord[MAXdim], offset, meshm=3.0, \u001b[01;35m\u001b[Kmeshn\u001b[m\u001b[K=4.0, meshr=5.0;\n",
            "      |                                            \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:83:55:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kmeshr\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   83 |   double coord[MAXdim], offset, meshm=3.0, meshn=4.0, \u001b[01;35m\u001b[Kmeshr\u001b[m\u001b[K=5.0;\n",
            "      |                                                       \u001b[01;35m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:84:20:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Ksimplex\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   84 |   double *coordp, *\u001b[01;35m\u001b[Ksimplex\u001b[m\u001b[K= NULL, *simplexp;\n",
            "      |                    \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:86:39:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Klensangle\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   86 |   double norm, factor, randr, rangap, \u001b[01;35m\u001b[Klensangle\u001b[m\u001b[K= 0, lensbase= 1;\n",
            "      |                                       \u001b[01;35m\u001b[K^~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:86:53:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Klensbase\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   86 |   double norm, factor, randr, rangap, lensangle= 0, \u001b[01;35m\u001b[Klensbase\u001b[m\u001b[K= 1;\n",
            "      |                                                     \u001b[01;35m\u001b[K^~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:87:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kcube\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   87 |   double anglediff, angle, x, y, \u001b[01;35m\u001b[Kcube\u001b[m\u001b[K= 0.0, diamond= 0.0;\n",
            "      |                                  \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:87:45:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kdiamond\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   87 |   double anglediff, angle, x, y, cube= 0.0, \u001b[01;35m\u001b[Kdiamond\u001b[m\u001b[K= 0.0;\n",
            "      |                                             \u001b[01;35m\u001b[K^~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:88:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kbox\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   88 |   double \u001b[01;35m\u001b[Kbox\u001b[m\u001b[K= qh_DEFAULTbox; /* scale all numbers before output */\n",
            "      |          \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/libqhull_r/rboxlib_r.c:91:26:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kvariable ‘\u001b[01m\u001b[Kfirst_point\u001b[m\u001b[K’ might be clobbered by ‘\u001b[01m\u001b[Klongjmp\u001b[m\u001b[K’ or ‘\u001b[01m\u001b[Kvfork\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclobbered\u0007-Wclobbered\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   91 |   char *s= command, *t, *\u001b[01;35m\u001b[Kfirst_point\u001b[m\u001b[K= NULL;\n",
            "      |                          \u001b[01;35m\u001b[K^~~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/libqhullstatic_r/userprintf_rbox_r.o src/libqhull_r/userprintf_rbox_r.c\n",
            "ar -rs lib/libqhullstatic_r.a src/libqhullstatic_r/global_r.o src/libqhullstatic_r/stat_r.o src/libqhullstatic_r/geom2_r.o src/libqhullstatic_r/poly2_r.o src/libqhullstatic_r/merge_r.o src/libqhullstatic_r/libqhull_r.o src/libqhullstatic_r/geom_r.o src/libqhullstatic_r/poly_r.o src/libqhullstatic_r/qset_r.o src/libqhullstatic_r/mem_r.o src/libqhullstatic_r/random_r.o src/libqhullstatic_r/usermem_r.o src/libqhullstatic_r/userprintf_r.o src/libqhullstatic_r/io_r.o src/libqhullstatic_r/user_r.o src/libqhullstatic_r/rboxlib_r.o src/libqhullstatic_r/userprintf_rbox_r.o\n",
            "ar: creating lib/libqhullstatic_r.a\n",
            "#ranlib lib/libqhullstatic_r.a\n",
            "gcc -o bin/qhull src/qhull/unix_r.o -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -Llib -lqhullstatic_r -lm\n",
            "chmod +x eg/q_test eg/q_eg eg/q_egtest\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/qconvex/qconvex.o src/qconvex/qconvex.c\n",
            "\u001b[01m\u001b[Ksrc/qconvex/qconvex.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Krun_qconvex\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/qconvex/qconvex.c:72:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kpassing argument 5 of ‘\u001b[01m\u001b[Kqh_init_A\u001b[m\u001b[K’ from incompatible pointer type [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wincompatible-pointer-types\u0007-Wincompatible-pointer-types\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   72 |   qh_init_A(fin, fout, stderr, argc, \u001b[01;35m\u001b[Kargv\u001b[m\u001b[K);  /* sets qh qhull_command */\n",
            "      |                                      \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "      |                                      \u001b[01;35m\u001b[K|\u001b[m\u001b[K\n",
            "      |                                      \u001b[01;35m\u001b[Kconst char **\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[Ksrc/qconvex/qconvex.c:12\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/libqhull.h:1083:79:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kexpected ‘\u001b[01m\u001b[Kchar **\u001b[m\u001b[K’ but argument is of type ‘\u001b[01m\u001b[Kconst char **\u001b[m\u001b[K’\n",
            " 1083 | void    qh_init_A(FILE *infile, FILE *outfile, FILE *errfile, int argc, \u001b[01;36m\u001b[Kchar *argv[]\u001b[m\u001b[K);\n",
            "      |                                                                         \u001b[01;36m\u001b[K~~~~~~^~~~~~\u001b[m\u001b[K\n",
            "gcc -c -O3 -ansi -Isrc -fpic -Wall -Wcast-qual -Wextra -Wwrite-strings -Wshadow -o src/qvoronoi/qvoronoi.o src/qvoronoi/qvoronoi.c\n",
            "\u001b[01m\u001b[Ksrc/qvoronoi/qvoronoi.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Krun_qvoronoi\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/qvoronoi/qvoronoi.c:285:39:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kpassing argument 5 of ‘\u001b[01m\u001b[Kqh_init_A\u001b[m\u001b[K’ from incompatible pointer type [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wincompatible-pointer-types\u0007-Wincompatible-pointer-types\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  285 |   qh_init_A (fin, fout, stderr, argc, \u001b[01;35m\u001b[Kargv\u001b[m\u001b[K);  /* sets qh qhull_command */\n",
            "      |                                       \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "      |                                       \u001b[01;35m\u001b[K|\u001b[m\u001b[K\n",
            "      |                                       \u001b[01;35m\u001b[Kconst char **\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[Ksrc/qvoronoi/qvoronoi.c:20\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[Ksrc/libqhull/libqhull.h:1083:79:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kexpected ‘\u001b[01m\u001b[Kchar **\u001b[m\u001b[K’ but argument is of type ‘\u001b[01m\u001b[Kconst char **\u001b[m\u001b[K’\n",
            " 1083 | void    qh_init_A(FILE *infile, FILE *outfile, FILE *errfile, int argc, \u001b[01;36m\u001b[Kchar *argv[]\u001b[m\u001b[K);\n",
            "      |                                                                         \u001b[01;36m\u001b[K~~~~~~^~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/qvoronoi/qvoronoi.c:237:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kunused variable ‘\u001b[01m\u001b[Ki\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-variable\u0007-Wunused-variable\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  237 |   int curlong, \u001b[01;35m\u001b[Ki\u001b[m\u001b[K,totlong; /* used !qh_NOmem */\n",
            "      |                \u001b[01;35m\u001b[K^\u001b[m\u001b[K\n",
            "make[1]: Leaving directory '/content/fpocket/src/qhull'\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/fpmain.c -o obj/fpmain.o\n",
            "\u001b[01m\u001b[Ksrc/fpmain.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kopen_file_format\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/fpmain.c:239:16:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kpdb\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  239 |         return \u001b[01;35m\u001b[Kpdb\u001b[m\u001b[K;\n",
            "      |                \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/psorting.c -o obj/psorting.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/pscoring.c -o obj/pscoring.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/utils.c -o obj/utils.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/pertable.c -o obj/pertable.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/memhandler.c -o obj/memhandler.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/voronoi.c -o obj/voronoi.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/sort.c -o obj/sort.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/calc.c -o obj/calc.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/writepdb.c -o obj/writepdb.o\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kwrite_pdb_atom_line\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:94:18:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kcomparison between pointer and integer\n",
            "   94 |         if(insert\u001b[01;35m\u001b[K!=\u001b[m\u001b[KNULL) {\n",
            "      |                  \u001b[01;35m\u001b[K^~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:101:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%05x\u001b[m\u001b[K’ directive writing between 5 and 8 bytes into a region of size 6 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  101 |                 sprintf(id_buf, \"\u001b[01;35m\u001b[K%05x\u001b[m\u001b[K\", id);\n",
            "      |                                  \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:101:33:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [100000, 2147483647]\n",
            "  101 |                 sprintf(id_buf, \u001b[01;36m\u001b[K\"%05x\"\u001b[m\u001b[K, id);\n",
            "      |                                 \u001b[01;36m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 6 and 9 bytes into a destination of size 6\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:99:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%5d\u001b[m\u001b[K’ directive writing between 5 and 11 bytes into a region of size 6 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "   99 |                 sprintf(id_buf, \"\u001b[01;35m\u001b[K%5d\u001b[m\u001b[K\", id);\n",
            "      |                                  \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:99:33:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [-2147483648, 99999]\n",
            "   99 |                 sprintf(id_buf, \u001b[01;36m\u001b[K\"%5d\"\u001b[m\u001b[K, id);\n",
            "      |                                 \u001b[01;36m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 6 and 12 bytes into a destination of size 6\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:104:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%4d\u001b[m\u001b[K’ directive writing between 4 and 11 bytes into a region of size 5 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  104 |                 sprintf(res_id_buf, \"\u001b[01;35m\u001b[K%4d\u001b[m\u001b[K\", res_id);\n",
            "      |                                      \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:104:37:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [-2147483648, 9999]\n",
            "  104 |                 sprintf(res_id_buf, \u001b[01;36m\u001b[K\"%4d\"\u001b[m\u001b[K, res_id);\n",
            "      |                                     \u001b[01;36m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 5 and 12 bytes into a destination of size 5\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kwrite_pqr_atom_line\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:185:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%05x\u001b[m\u001b[K’ directive writing between 5 and 8 bytes into a region of size 7 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  185 |                 sprintf(id_buf, \"\u001b[01;35m\u001b[K%05x\u001b[m\u001b[K\", id);\n",
            "      |                                  \u001b[01;35m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:185:33:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [100000, 2147483647]\n",
            "  185 |                 sprintf(id_buf, \u001b[01;36m\u001b[K\"%05x\"\u001b[m\u001b[K, id);\n",
            "      |                                 \u001b[01;36m\u001b[K^~~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 6 and 9 bytes into a destination of size 7\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:183:34:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%5d\u001b[m\u001b[K’ directive writing between 5 and 11 bytes into a region of size 7 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  183 |                 sprintf(id_buf, \"\u001b[01;35m\u001b[K%5d\u001b[m\u001b[K\", id);\n",
            "      |                                  \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:183:33:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [-2147483648, 99999]\n",
            "  183 |                 sprintf(id_buf, \u001b[01;36m\u001b[K\"%5d\"\u001b[m\u001b[K, id);\n",
            "      |                                 \u001b[01;36m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 6 and 12 bytes into a destination of size 7\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:188:38:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%4d\u001b[m\u001b[K’ directive writing between 4 and 11 bytes into a region of size 6 [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  188 |                 sprintf(res_id_buf, \"\u001b[01;35m\u001b[K%4d\u001b[m\u001b[K\", res_id);\n",
            "      |                                      \u001b[01;35m\u001b[K^~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/writepdb.c:188:37:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kdirective argument in the range [-2147483648, 9999]\n",
            "  188 |                 sprintf(res_id_buf, \u001b[01;36m\u001b[K\"%4d\"\u001b[m\u001b[K, res_id);\n",
            "      |                                     \u001b[01;36m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/writepdb.h:14\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/writepdb.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[K‘\u001b[01m\u001b[K__builtin___sprintf_chk\u001b[m\u001b[K’ output between 5 and 12 bytes into a destination of size 6\n",
            "   38 |   return \u001b[01;36m\u001b[K__builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,\u001b[m\u001b[K\n",
            "      |          \u001b[01;36m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   39 | \u001b[01;36m\u001b[K                                  __glibc_objsize (__s), __fmt,\u001b[m\u001b[K\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "   40 | \u001b[01;36m\u001b[K                                  __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                                   \u001b[01;36m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/rpdb.c -o obj/rpdb.o\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Krpdb_open\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:902:42:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kz\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  902 |                 if (\u001b[01;35m\u001b[Kx < 9990 && y < 9990 && z < 9990\u001b[m\u001b[K)\n",
            "      |                     \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:902:30:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Ky\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  902 |                 if (\u001b[01;35m\u001b[Kx < 9990 && y < 9990\u001b[m\u001b[K && z < 9990)\n",
            "      |                     \u001b[01;35m\u001b[K~~~~~~~~~^~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:902:20:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Kx\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  902 |                 if \u001b[01;35m\u001b[K(\u001b[m\u001b[Kx < 9990 && y < 9990 && z < 9990)\n",
            "      |                    \u001b[01;35m\u001b[K^\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Krpdb_read\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:1234:48:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Ktmpz\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1234 |                 if (\u001b[01;35m\u001b[Ktmpx < 9990 && tmpy < 9990 && tmpz < 9990\u001b[m\u001b[K)\n",
            "      |                     \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:1234:33:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Ktmpy\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1234 |                 if (\u001b[01;35m\u001b[Ktmpx < 9990 && tmpy < 9990\u001b[m\u001b[K && tmpz < 9990)\n",
            "      |                     \u001b[01;35m\u001b[K~~~~~~~~~~~~^~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/rpdb.c:1234:20:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[Ktmpx\u001b[m\u001b[K’ may be used uninitialized in this function [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized\u0007-Wmaybe-uninitialized\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            " 1234 |                 if \u001b[01;35m\u001b[K(\u001b[m\u001b[Ktmpx < 9990 && tmpy < 9990 && tmpz < 9990)\n",
            "      |                    \u001b[01;35m\u001b[K^\u001b[m\u001b[K\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/tparams.c -o obj/tparams.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/fparams.c -o obj/fparams.o\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:\u001b[m\u001b[K In function ‘\u001b[01m\u001b[Kget_fpocket_args\u001b[m\u001b[K’:\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:296:24:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kpassing argument 1 of ‘\u001b[01m\u001b[Kstrcpy\u001b[m\u001b[K’ from incompatible pointer type [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wincompatible-pointer-types\u0007-Wincompatible-pointer-types\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  296 |                 strcpy(\u001b[01;35m\u001b[K&residue_string\u001b[m\u001b[K, pt);\n",
            "      |                        \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "      |                        \u001b[01;35m\u001b[K|\u001b[m\u001b[K\n",
            "      |                        \u001b[01;35m\u001b[Kchar * (*)[8000]\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/features.h:486\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[K/usr/include/stdio.h:27\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/fparams.h:16\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/fparams.c:2\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/string_fortified.h:77:1:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Kexpected ‘\u001b[01m\u001b[Kchar * restrict\u001b[m\u001b[K’ but argument is of type ‘\u001b[01m\u001b[Kchar * (*)[8000]\u001b[m\u001b[K’\n",
            "   77 | \u001b[01;36m\u001b[K__NTH\u001b[m\u001b[K (strcpy (char *__restrict __dest, const char *__restrict __src))\n",
            "      | \u001b[01;36m\u001b[K^~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:297:23:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kassignment to ‘\u001b[01m\u001b[Kchar *\u001b[m\u001b[K’ from incompatible pointer type ‘\u001b[01m\u001b[Kchar **\u001b[m\u001b[K’ [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wincompatible-pointer-types\u0007-Wincompatible-pointer-types\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  297 |                 rest2 \u001b[01;35m\u001b[K=\u001b[m\u001b[K residue_string;\n",
            "      |                       \u001b[01;35m\u001b[K^\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:304:58:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis statement may fall through [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-fallthrough=\u0007-Wimplicit-fallthrough=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  304 |                         \u001b[01;35m\u001b[Kpar->xpocket_residue_number[pti] = (unsigned short)atoi(apt)\u001b[m\u001b[K; // fprintf(stdout,\"residuenumber: %d\\n\", atoi(apt));\n",
            "      |                         \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:305:21:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Khere\n",
            "  305 |                     \u001b[01;36m\u001b[Kcase\u001b[m\u001b[K 1:\n",
            "      |                     \u001b[01;36m\u001b[K^~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:306:25:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[Kthis statement may fall through [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-fallthrough=\u0007-Wimplicit-fallthrough=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  306 |                         \u001b[01;35m\u001b[Kstrncpy(&(par->xpocket_insertion_code[pti]), apt, 1)\u001b[m\u001b[K;\n",
            "      |                         \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "\u001b[01m\u001b[Ksrc/fparams.c:307:21:\u001b[m\u001b[K \u001b[01;36m\u001b[Knote: \u001b[m\u001b[Khere\n",
            "  307 |                     \u001b[01;36m\u001b[Kcase\u001b[m\u001b[K 2:\n",
            "      |                     \u001b[01;36m\u001b[K^~~~\u001b[m\u001b[K\n",
            "In file included from \u001b[01m\u001b[K/usr/include/stdio.h:894\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/../headers/fparams.h:16\u001b[m\u001b[K,\n",
            "                 from \u001b[01m\u001b[Ksrc/fparams.c:2\u001b[m\u001b[K:\n",
            "In function ‘\u001b[01m\u001b[Kfprintf\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_clustering_method\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:631:9\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_clustering_method\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:623:5\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:105:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%s\u001b[m\u001b[K’ directive argument is null [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   return \u001b[01;35m\u001b[K__fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  106 | \u001b[01;35m\u001b[K                        __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                         \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "In function ‘\u001b[01m\u001b[Kfprintf\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_distance_measure\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:646:9\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_distance_measure\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:638:5\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:105:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%s\u001b[m\u001b[K’ directive argument is null [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   return \u001b[01;35m\u001b[K__fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  106 | \u001b[01;35m\u001b[K                        __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                         \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "In function ‘\u001b[01m\u001b[Kfprintf\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_distance_measure\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:646:9\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_distance_measure\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:638:5\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[KDEPR_get_fpocket_args\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:474:27\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:105:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%s\u001b[m\u001b[K’ directive argument is null [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   return \u001b[01;35m\u001b[K__fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  106 | \u001b[01;35m\u001b[K                        __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                         \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "In function ‘\u001b[01m\u001b[Kfprintf\u001b[m\u001b[K’,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_clustering_method\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:631:9\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[Kparse_clustering_method\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:623:5\u001b[m\u001b[K,\n",
            "    inlined from ‘\u001b[01m\u001b[KDEPR_get_fpocket_args\u001b[m\u001b[K’ at \u001b[01m\u001b[Ksrc/fparams.c:471:27\u001b[m\u001b[K:\n",
            "\u001b[01m\u001b[K/usr/include/x86_64-linux-gnu/bits/stdio2.h:105:10:\u001b[m\u001b[K \u001b[01;35m\u001b[Kwarning: \u001b[m\u001b[K‘\u001b[01m\u001b[K%s\u001b[m\u001b[K’ directive argument is null [\u001b[01;35m\u001b[K\u001b]8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wformat-overflow=\u0007-Wformat-overflow=\u001b]8;;\u0007\u001b[m\u001b[K]\n",
            "  105 |   return \u001b[01;35m\u001b[K__fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,\u001b[m\u001b[K\n",
            "      |          \u001b[01;35m\u001b[K^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "  106 | \u001b[01;35m\u001b[K                        __va_arg_pack ())\u001b[m\u001b[K;\n",
            "      |                         \u001b[01;35m\u001b[K~~~~~~~~~~~~~~~~~\u001b[m\u001b[K\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/pocket.c -o obj/pocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/refine.c -o obj/refine.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/descriptors.c -o obj/descriptors.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/aa.c -o obj/aa.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/fpocket.c -o obj/fpocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/write_visu.c -o obj/write_visu.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/fpout.c -o obj/fpout.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/atom.c -o obj/atom.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/writepocket.c -o obj/writepocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/voronoi_lst.c -o obj/voronoi_lst.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/asa.c -o obj/asa.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/clusterlib.c -o obj/clusterlib.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/energy.c -o obj/energy.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/topology.c -o obj/topology.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/read_mmcif.c -o obj/read_mmcif.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/geom2.c -o src/qhull/src/libqhull/geom2.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/geom.c -o src/qhull/src/libqhull/geom.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/global.c -o src/qhull/src/libqhull/global.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/io.c -o src/qhull/src/libqhull/io.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/libqhull.c -o src/qhull/src/libqhull/libqhull.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/mem.c -o src/qhull/src/libqhull/mem.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/merge.c -o src/qhull/src/libqhull/merge.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/poly2.c -o src/qhull/src/libqhull/poly2.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/poly.c -o src/qhull/src/libqhull/poly.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/qset.c -o src/qhull/src/libqhull/qset.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/random.c -o src/qhull/src/libqhull/random.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/rboxlib.c -o src/qhull/src/libqhull/rboxlib.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/stat.c -o src/qhull/src/libqhull/stat.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/user.c -o src/qhull/src/libqhull/user.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/usermem.c -o src/qhull/src/libqhull/usermem.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/userprintf.c -o src/qhull/src/libqhull/userprintf.o\n",
            "gcc -O -g -pg -ansi -c src/qhull/src/libqhull/userprintf_rbox.c -o src/qhull/src/libqhull/userprintf_rbox.o\n",
            "LD_LIBRARY_PATH=plugins/LINUXAMD64/molfile gcc obj/fpmain.o obj/psorting.o obj/pscoring.o obj/utils.o obj/pertable.o obj/memhandler.o obj/voronoi.o obj/sort.o obj/calc.o obj/writepdb.o obj/rpdb.o obj/tparams.o obj/fparams.o obj/pocket.o obj/refine.o obj/descriptors.o obj/aa.o obj/fpocket.o obj/write_visu.o obj/fpout.o obj/atom.o obj/writepocket.o obj/voronoi_lst.o obj/asa.o obj/clusterlib.o obj/energy.o obj/topology.o obj/read_mmcif.o src/qhull/src/libqhull/geom2.o src/qhull/src/libqhull/geom.o src/qhull/src/libqhull/global.o src/qhull/src/libqhull/io.o src/qhull/src/libqhull/libqhull.o src/qhull/src/libqhull/mem.o src/qhull/src/libqhull/merge.o src/qhull/src/libqhull/poly2.o src/qhull/src/libqhull/poly.o src/qhull/src/libqhull/qset.o src/qhull/src/libqhull/random.o src/qhull/src/libqhull/rboxlib.o src/qhull/src/libqhull/stat.o src/qhull/src/libqhull/user.o src/qhull/src/libqhull/usermem.o src/qhull/src/libqhull/userprintf.o src/qhull/src/libqhull/userprintf_rbox.o src/qhull/src/qvoronoi/qvoronoi.o src/qhull/src/qconvex/qconvex.o -o bin/fpocket -lm -Lplugins/LINUXAMD64/molfile plugins/LINUXAMD64/molfile/libmolfile_plugin.a -lstdc++\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/tpmain.c -o obj/tpmain.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/tpocket.c -o obj/tpocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/neighbor.c -o obj/neighbor.o\n",
            "LD_LIBRARY_PATH=plugins/LINUXAMD64/molfile gcc obj/tpmain.o obj/psorting.o obj/pscoring.o obj/utils.o obj/pertable.o obj/memhandler.o obj/voronoi.o obj/sort.o obj/calc.o obj/writepdb.o obj/rpdb.o obj/tparams.o obj/fparams.o obj/pocket.o obj/refine.o obj/tpocket.o obj/descriptors.o obj/aa.o obj/fpocket.o obj/write_visu.o obj/fpout.o obj/atom.o obj/writepocket.o obj/voronoi_lst.o obj/neighbor.o obj/asa.o obj/clusterlib.o obj/energy.o obj/topology.o obj/read_mmcif.o src/qhull/src/qvoronoi/qvoronoi.o src/qhull/src/qconvex/qconvex.o src/qhull/src/libqhull/geom2.o src/qhull/src/libqhull/geom.o src/qhull/src/libqhull/global.o src/qhull/src/libqhull/io.o src/qhull/src/libqhull/libqhull.o src/qhull/src/libqhull/mem.o src/qhull/src/libqhull/merge.o src/qhull/src/libqhull/poly2.o src/qhull/src/libqhull/poly.o src/qhull/src/libqhull/qset.o src/qhull/src/libqhull/random.o src/qhull/src/libqhull/rboxlib.o src/qhull/src/libqhull/stat.o src/qhull/src/libqhull/user.o src/qhull/src/libqhull/usermem.o src/qhull/src/libqhull/userprintf.o src/qhull/src/libqhull/userprintf_rbox.o -o bin/tpocket -lm -Lplugins/LINUXAMD64/molfile plugins/LINUXAMD64/molfile/libmolfile_plugin.a -lstdc++\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/dpmain.c -o obj/dpmain.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/dpocket.c -o obj/dpocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/dparams.c -o obj/dparams.o\n",
            "LD_LIBRARY_PATH=plugins/LINUXAMD64/molfile gcc obj/dpmain.o obj/psorting.o obj/pscoring.o obj/dpocket.o obj/dparams.o obj/voronoi.o obj/sort.o obj/rpdb.o obj/descriptors.o obj/neighbor.o obj/atom.o obj/aa.o obj/pertable.o obj/calc.o obj/utils.o obj/writepdb.o obj/memhandler.o obj/pocket.o obj/refine.o obj/fparams.o obj/fpocket.o obj/fpout.o obj/writepocket.o obj/write_visu.o obj/asa.o obj/read_mmcif.o obj/voronoi_lst.o obj/clusterlib.o src/qhull/src/libqhull/geom2.o src/qhull/src/libqhull/geom.o src/qhull/src/libqhull/global.o src/qhull/src/libqhull/io.o src/qhull/src/libqhull/libqhull.o src/qhull/src/libqhull/mem.o src/qhull/src/libqhull/merge.o src/qhull/src/libqhull/poly2.o src/qhull/src/libqhull/poly.o src/qhull/src/libqhull/qset.o src/qhull/src/libqhull/random.o src/qhull/src/libqhull/rboxlib.o src/qhull/src/libqhull/stat.o src/qhull/src/libqhull/user.o src/qhull/src/libqhull/usermem.o src/qhull/src/libqhull/userprintf.o src/qhull/src/libqhull/userprintf_rbox.o src/qhull/src/qvoronoi/qvoronoi.o src/qhull/src/qconvex/qconvex.o obj/energy.o obj/topology.o -o bin/dpocket -lm -Lplugins/LINUXAMD64/molfile plugins/LINUXAMD64/molfile/libmolfile_plugin.a -lstdc++\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/mdpmain.c -o obj/mdpmain.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/mdpocket.c -o obj/mdpocket.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/mdpbase.c -o obj/mdpbase.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/mdpout.c -o obj/mdpout.o\n",
            "gcc -W -Wextra -Wwrite-strings -Wstrict-prototypes -DM_OS_LINUX -DMNO_MEM_DEBUG -O2 -g -pg -std=gnu99 -Iplugins/include -Iplugins/LINUXAMD64/molfile -c src/mdparams.c -o obj/mdparams.o\n",
            "LD_LIBRARY_PATH=plugins/LINUXAMD64/molfile gcc obj/mdpmain.o obj/mdpocket.o obj/mdpbase.o obj/mdpout.o obj/psorting.o obj/pscoring.o obj/mdparams.o obj/voronoi.o obj/sort.o obj/rpdb.o obj/descriptors.o obj/neighbor.o obj/atom.o obj/aa.o obj/pertable.o obj/calc.o obj/utils.o obj/writepdb.o obj/memhandler.o obj/pocket.o obj/refine.o obj/fparams.o obj/fpocket.o obj/fpout.o obj/writepocket.o obj/write_visu.o obj/asa.o obj/read_mmcif.o obj/voronoi_lst.o obj/clusterlib.o src/qhull/src/libqhull/geom2.o src/qhull/src/libqhull/geom.o src/qhull/src/libqhull/global.o src/qhull/src/libqhull/io.o src/qhull/src/libqhull/libqhull.o src/qhull/src/libqhull/mem.o src/qhull/src/libqhull/merge.o src/qhull/src/libqhull/poly2.o src/qhull/src/libqhull/poly.o src/qhull/src/libqhull/qset.o src/qhull/src/libqhull/random.o src/qhull/src/libqhull/rboxlib.o src/qhull/src/libqhull/stat.o src/qhull/src/libqhull/user.o src/qhull/src/libqhull/usermem.o src/qhull/src/libqhull/userprintf.o src/qhull/src/libqhull/userprintf_rbox.o src/qhull/src/qvoronoi/qvoronoi.o src/qhull/src/qconvex/qconvex.o obj/energy.o obj/topology.o -o bin/mdpocket -lm -Lplugins/LINUXAMD64/molfile plugins/LINUXAMD64/molfile/libmolfile_plugin.a -lstdc++ \n"
          ]
        }
      ],
      "source": [
        "!apt-get install -y build-essential git\n",
        "# Clone the fpocket repository\n",
        "!git clone https://github.com/Discngine/fpocket.git\n",
        "%cd fpocket\n",
        "!make"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "i0X-f1F__E21"
      },
      "source": [
        "#### Run Fpocket for each of the protein and save the output in output directory"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "c23gjlyL-CqT"
      },
      "outputs": [],
      "source": [
        "import subprocess\n",
        "def run_fpocket(pdb_file_path):\n",
        "    \"\"\"\n",
        "    Runs fpocket on the given PDB file to find binding pockets.\n",
        "\n",
        "    Parameters:\n",
        "    pdb_file_path (str): The path to the PDB file.\n",
        "\n",
        "    Returns:\n",
        "    str: The path to the fpocket output directory.\n",
        "    \"\"\"\n",
        "    try:\n",
        "        # Run fpocket\n",
        "        command = [\"bin/fpocket\", \"-f\", pdb_file_path]\n",
        "        subprocess.run(command, check=True)\n",
        "\n",
        "        # Extract the output directory path\n",
        "        pdb_base = os.path.basename(pdb_file_path).split('.')[0]\n",
        "        output_dir = f\"{pdb_base}_out\"\n",
        "    except subprocess.CalledProcessError as e:\n",
        "        print(f'Error running fpocket on {pdb_file_path}: {e}')\n",
        "        return None"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Wa1eLpkE_h_2"
      },
      "source": [
        "Specify the base directory where the pdb files are stored"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "KL0Ia8bf_g0-"
      },
      "outputs": [],
      "source": [
        "base_pdb_files = '/content/pdb_files/'"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "trqH3LVZ_m73"
      },
      "source": [
        "Run Fpocket"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "U33HtrHr_YWI"
      },
      "outputs": [],
      "source": [
        "for protein in proteins_list:\n",
        "  protein_structure = os.path.join(base_pdb_files, f'{protein}.pdb')\n",
        "  run_fpocket(protein_structure)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GBwm8hq5_ObG"
      },
      "source": [
        "Let's have a look at the fpocket output\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_nO_THI8A6xG",
        "outputId": "4d4f6b59-e0b3-4c05-babe-fcddb5a811d6"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Pocket 1 :\n",
            "Score : \t0.924\n",
            "Druggability Score : \t0.535\n",
            "Number of Alpha Spheres : \t95\n",
            "Total SASA : \t9.960\n",
            "Polar SASA : \t7.544\n",
            "Apolar SASA : \t2.415\n",
            "Volume : \t493.527\n",
            "Mean local hydrophobic density : \t21.440\n",
            "Mean alpha sphere radius :\t3.774\n",
            "Mean alp. sph. solvent access : \t0.449\n",
            "Apolar alpha sphere proportion : \t0.263\n",
            "Hydrophobicity score:\t26.957\n",
            "Volume score: \t 4.348\n",
            "Polarity score:\t 14\n",
            "Charge score :\t 4\n",
            "Proportion of polar atoms: \t49.020\n",
            "Alpha sphere density : \t5.127\n",
            "Cent. of mass - Alpha Sphere max dist: \t11.895\n",
            "Flexibility : \t0.031\n",
            "\n",
            "Pocket 2 :\n",
            "Score : \t0.323\n",
            "Druggability Score : \t0.615\n",
            "Number of Alpha Spheres : \t83\n",
            "Total SASA : \t157.049\n",
            "Polar SASA : \t99.083\n",
            "Apolar SASA : \t57.966\n",
            "Volume : \t479.790\n",
            "Mean local hydrophobic density : \t15.053\n",
            "Mean alpha sphere radius :\t3.795\n",
            "Mean alp. sph. solvent access : \t0.423\n",
            "Apolar alpha sphere proportion : \t0.229\n",
            "Hydrophobicity score:\t21.000\n",
            "Volume score: \t 4.100\n",
            "Polarity score:\t 6\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t54.167\n",
            "Alpha sphere density : \t5.868\n",
            "Cent. of mass - Alpha Sphere max dist: \t17.292\n",
            "Flexibility : \t0.090\n",
            "\n",
            "Pocket 3 :\n",
            "Score : \t0.308\n",
            "Druggability Score : \t0.848\n",
            "Number of Alpha Spheres : \t67\n",
            "Total SASA : \t172.894\n",
            "Polar SASA : \t69.038\n",
            "Apolar SASA : \t103.856\n",
            "Volume : \t695.777\n",
            "Mean local hydrophobic density : \t23.312\n",
            "Mean alpha sphere radius :\t3.936\n",
            "Mean alp. sph. solvent access : \t0.537\n",
            "Apolar alpha sphere proportion : \t0.478\n",
            "Hydrophobicity score:\t29.350\n",
            "Volume score: \t 4.450\n",
            "Polarity score:\t 9\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t37.736\n",
            "Alpha sphere density : \t6.774\n",
            "Cent. of mass - Alpha Sphere max dist: \t19.126\n",
            "Flexibility : \t0.087\n",
            "\n",
            "Pocket 4 :\n",
            "Score : \t0.170\n",
            "Druggability Score : \t0.001\n",
            "Number of Alpha Spheres : \t37\n",
            "Total SASA : \t77.069\n",
            "Polar SASA : \t32.387\n",
            "Apolar SASA : \t44.682\n",
            "Volume : \t291.443\n",
            "Mean local hydrophobic density : \t5.000\n",
            "Mean alpha sphere radius :\t3.776\n",
            "Mean alp. sph. solvent access : \t0.544\n",
            "Apolar alpha sphere proportion : \t0.162\n",
            "Hydrophobicity score:\t29.100\n",
            "Volume score: \t 3.700\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t44.444\n",
            "Alpha sphere density : \t3.532\n",
            "Cent. of mass - Alpha Sphere max dist: \t9.721\n",
            "Flexibility : \t0.067\n",
            "\n",
            "Pocket 5 :\n",
            "Score : \t0.124\n",
            "Druggability Score : \t0.016\n",
            "Number of Alpha Spheres : \t39\n",
            "Total SASA : \t77.117\n",
            "Polar SASA : \t31.227\n",
            "Apolar SASA : \t45.890\n",
            "Volume : \t303.785\n",
            "Mean local hydrophobic density : \t16.000\n",
            "Mean alpha sphere radius :\t4.001\n",
            "Mean alp. sph. solvent access : \t0.587\n",
            "Apolar alpha sphere proportion : \t0.436\n",
            "Hydrophobicity score:\t45.154\n",
            "Volume score: \t 5.000\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t42.857\n",
            "Alpha sphere density : \t2.914\n",
            "Cent. of mass - Alpha Sphere max dist: \t6.045\n",
            "Flexibility : \t0.084\n",
            "\n",
            "Pocket 6 :\n",
            "Score : \t0.116\n",
            "Druggability Score : \t0.002\n",
            "Number of Alpha Spheres : \t16\n",
            "Total SASA : \t66.472\n",
            "Polar SASA : \t19.375\n",
            "Apolar SASA : \t47.097\n",
            "Volume : \t273.670\n",
            "Mean local hydrophobic density : \t9.000\n",
            "Mean alpha sphere radius :\t3.896\n",
            "Mean alp. sph. solvent access : \t0.607\n",
            "Apolar alpha sphere proportion : \t0.625\n",
            "Hydrophobicity score:\t32.429\n",
            "Volume score: \t 3.714\n",
            "Polarity score:\t 3\n",
            "Charge score :\t -1\n",
            "Proportion of polar atoms: \t30.000\n",
            "Alpha sphere density : \t3.763\n",
            "Cent. of mass - Alpha Sphere max dist: \t6.233\n",
            "Flexibility : \t0.132\n",
            "\n",
            "Pocket 7 :\n",
            "Score : \t0.100\n",
            "Druggability Score : \t0.006\n",
            "Number of Alpha Spheres : \t23\n",
            "Total SASA : \t55.512\n",
            "Polar SASA : \t20.490\n",
            "Apolar SASA : \t35.021\n",
            "Volume : \t180.286\n",
            "Mean local hydrophobic density : \t9.000\n",
            "Mean alpha sphere radius :\t3.700\n",
            "Mean alp. sph. solvent access : \t0.507\n",
            "Apolar alpha sphere proportion : \t0.435\n",
            "Hydrophobicity score:\t18.714\n",
            "Volume score: \t 4.857\n",
            "Polarity score:\t 5\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t38.889\n",
            "Alpha sphere density : \t2.712\n",
            "Cent. of mass - Alpha Sphere max dist: \t7.423\n",
            "Flexibility : \t0.082\n",
            "\n",
            "Pocket 8 :\n",
            "Score : \t0.096\n",
            "Druggability Score : \t0.040\n",
            "Number of Alpha Spheres : \t46\n",
            "Total SASA : \t120.073\n",
            "Polar SASA : \t45.200\n",
            "Apolar SASA : \t74.873\n",
            "Volume : \t356.338\n",
            "Mean local hydrophobic density : \t15.889\n",
            "Mean alpha sphere radius :\t3.856\n",
            "Mean alp. sph. solvent access : \t0.467\n",
            "Apolar alpha sphere proportion : \t0.391\n",
            "Hydrophobicity score:\t40.909\n",
            "Volume score: \t 4.545\n",
            "Polarity score:\t 3\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t35.714\n",
            "Alpha sphere density : \t4.130\n",
            "Cent. of mass - Alpha Sphere max dist: \t9.926\n",
            "Flexibility : \t0.114\n",
            "\n",
            "Pocket 9 :\n",
            "Score : \t0.094\n",
            "Druggability Score : \t0.626\n",
            "Number of Alpha Spheres : \t59\n",
            "Total SASA : \t149.738\n",
            "Polar SASA : \t50.713\n",
            "Apolar SASA : \t99.026\n",
            "Volume : \t515.888\n",
            "Mean local hydrophobic density : \t30.188\n",
            "Mean alpha sphere radius :\t3.879\n",
            "Mean alp. sph. solvent access : \t0.490\n",
            "Apolar alpha sphere proportion : \t0.542\n",
            "Hydrophobicity score:\t9.812\n",
            "Volume score: \t 4.375\n",
            "Polarity score:\t 8\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t41.667\n",
            "Alpha sphere density : \t4.421\n",
            "Cent. of mass - Alpha Sphere max dist: \t10.792\n",
            "Flexibility : \t0.146\n",
            "\n",
            "Pocket 10 :\n",
            "Score : \t0.082\n",
            "Druggability Score : \t0.001\n",
            "Number of Alpha Spheres : \t23\n",
            "Total SASA : \t53.189\n",
            "Polar SASA : \t30.244\n",
            "Apolar SASA : \t22.945\n",
            "Volume : \t215.752\n",
            "Mean local hydrophobic density : \t2.000\n",
            "Mean alpha sphere radius :\t3.912\n",
            "Mean alp. sph. solvent access : \t0.482\n",
            "Apolar alpha sphere proportion : \t0.130\n",
            "Hydrophobicity score:\t18.091\n",
            "Volume score: \t 4.182\n",
            "Polarity score:\t 5\n",
            "Charge score :\t -1\n",
            "Proportion of polar atoms: \t50.000\n",
            "Alpha sphere density : \t2.367\n",
            "Cent. of mass - Alpha Sphere max dist: \t5.442\n",
            "Flexibility : \t0.070\n",
            "\n",
            "Pocket 11 :\n",
            "Score : \t0.067\n",
            "Druggability Score : \t0.005\n",
            "Number of Alpha Spheres : \t33\n",
            "Total SASA : \t98.192\n",
            "Polar SASA : \t49.907\n",
            "Apolar SASA : \t48.285\n",
            "Volume : \t230.851\n",
            "Mean local hydrophobic density : \t9.000\n",
            "Mean alpha sphere radius :\t3.640\n",
            "Mean alp. sph. solvent access : \t0.400\n",
            "Apolar alpha sphere proportion : \t0.303\n",
            "Hydrophobicity score:\t20.091\n",
            "Volume score: \t 3.818\n",
            "Polarity score:\t 5\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t50.000\n",
            "Alpha sphere density : \t3.626\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.639\n",
            "Flexibility : \t0.149\n",
            "\n",
            "Pocket 12 :\n",
            "Score : \t0.066\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t18\n",
            "Total SASA : \t70.906\n",
            "Polar SASA : \t40.715\n",
            "Apolar SASA : \t30.191\n",
            "Volume : \t276.108\n",
            "Mean local hydrophobic density : \t3.000\n",
            "Mean alpha sphere radius :\t3.912\n",
            "Mean alp. sph. solvent access : \t0.764\n",
            "Apolar alpha sphere proportion : \t0.222\n",
            "Hydrophobicity score:\t-5.625\n",
            "Volume score: \t 4.000\n",
            "Polarity score:\t 6\n",
            "Charge score :\t -2\n",
            "Proportion of polar atoms: \t42.857\n",
            "Alpha sphere density : \t3.259\n",
            "Cent. of mass - Alpha Sphere max dist: \t6.493\n",
            "Flexibility : \t0.248\n",
            "\n",
            "Pocket 13 :\n",
            "Score : \t0.061\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t16\n",
            "Total SASA : \t53.881\n",
            "Polar SASA : \t32.144\n",
            "Apolar SASA : \t21.737\n",
            "Volume : \t207.140\n",
            "Mean local hydrophobic density : \t0.000\n",
            "Mean alpha sphere radius :\t3.859\n",
            "Mean alp. sph. solvent access : \t0.483\n",
            "Apolar alpha sphere proportion : \t0.000\n",
            "Hydrophobicity score:\t6.857\n",
            "Volume score: \t 3.714\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t46.667\n",
            "Alpha sphere density : \t2.604\n",
            "Cent. of mass - Alpha Sphere max dist: \t5.709\n",
            "Flexibility : \t0.040\n",
            "\n",
            "Pocket 14 :\n",
            "Score : \t0.052\n",
            "Druggability Score : \t0.056\n",
            "Number of Alpha Spheres : \t34\n",
            "Total SASA : \t106.933\n",
            "Polar SASA : \t52.590\n",
            "Apolar SASA : \t54.343\n",
            "Volume : \t337.196\n",
            "Mean local hydrophobic density : \t19.000\n",
            "Mean alpha sphere radius :\t3.914\n",
            "Mean alp. sph. solvent access : \t0.594\n",
            "Apolar alpha sphere proportion : \t0.588\n",
            "Hydrophobicity score:\t16.182\n",
            "Volume score: \t 4.182\n",
            "Polarity score:\t 5\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t40.000\n",
            "Alpha sphere density : \t3.739\n",
            "Cent. of mass - Alpha Sphere max dist: \t9.922\n",
            "Flexibility : \t0.107\n",
            "\n",
            "Pocket 15 :\n",
            "Score : \t0.049\n",
            "Druggability Score : \t0.001\n",
            "Number of Alpha Spheres : \t30\n",
            "Total SASA : \t105.156\n",
            "Polar SASA : \t68.927\n",
            "Apolar SASA : \t36.229\n",
            "Volume : \t305.590\n",
            "Mean local hydrophobic density : \t8.000\n",
            "Mean alpha sphere radius :\t3.764\n",
            "Mean alp. sph. solvent access : \t0.478\n",
            "Apolar alpha sphere proportion : \t0.300\n",
            "Hydrophobicity score:\t32.600\n",
            "Volume score: \t 4.000\n",
            "Polarity score:\t 6\n",
            "Charge score :\t -1\n",
            "Proportion of polar atoms: \t44.444\n",
            "Alpha sphere density : \t3.793\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.473\n",
            "Flexibility : \t0.126\n",
            "\n",
            "Pocket 16 :\n",
            "Score : \t0.038\n",
            "Druggability Score : \t0.002\n",
            "Number of Alpha Spheres : \t26\n",
            "Total SASA : \t87.662\n",
            "Polar SASA : \t35.734\n",
            "Apolar SASA : \t51.928\n",
            "Volume : \t386.685\n",
            "Mean local hydrophobic density : \t6.000\n",
            "Mean alpha sphere radius :\t3.878\n",
            "Mean alp. sph. solvent access : \t0.578\n",
            "Apolar alpha sphere proportion : \t0.269\n",
            "Hydrophobicity score:\t34.875\n",
            "Volume score: \t 4.875\n",
            "Polarity score:\t 5\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t40.909\n",
            "Alpha sphere density : \t3.155\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.944\n",
            "Flexibility : \t0.084\n",
            "\n",
            "Pocket 17 :\n",
            "Score : \t0.027\n",
            "Druggability Score : \t0.005\n",
            "Number of Alpha Spheres : \t22\n",
            "Total SASA : \t93.222\n",
            "Polar SASA : \t40.087\n",
            "Apolar SASA : \t53.136\n",
            "Volume : \t316.036\n",
            "Mean local hydrophobic density : \t12.000\n",
            "Mean alpha sphere radius :\t3.913\n",
            "Mean alp. sph. solvent access : \t0.541\n",
            "Apolar alpha sphere proportion : \t0.591\n",
            "Hydrophobicity score:\t20.750\n",
            "Volume score: \t 4.500\n",
            "Polarity score:\t 6\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t47.619\n",
            "Alpha sphere density : \t3.575\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.418\n",
            "Flexibility : \t0.199\n",
            "\n",
            "Pocket 18 :\n",
            "Score : \t0.023\n",
            "Druggability Score : \t0.005\n",
            "Number of Alpha Spheres : \t24\n",
            "Total SASA : \t64.654\n",
            "Polar SASA : \t23.594\n",
            "Apolar SASA : \t41.059\n",
            "Volume : \t215.579\n",
            "Mean local hydrophobic density : \t10.000\n",
            "Mean alpha sphere radius :\t3.658\n",
            "Mean alp. sph. solvent access : \t0.416\n",
            "Apolar alpha sphere proportion : \t0.458\n",
            "Hydrophobicity score:\t50.889\n",
            "Volume score: \t 3.889\n",
            "Polarity score:\t 2\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t43.750\n",
            "Alpha sphere density : \t2.216\n",
            "Cent. of mass - Alpha Sphere max dist: \t6.211\n",
            "Flexibility : \t0.081\n",
            "\n",
            "Pocket 19 :\n",
            "Score : \t0.004\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t34\n",
            "Total SASA : \t97.832\n",
            "Polar SASA : \t50.735\n",
            "Apolar SASA : \t47.098\n",
            "Volume : \t258.882\n",
            "Mean local hydrophobic density : \t4.000\n",
            "Mean alpha sphere radius :\t3.867\n",
            "Mean alp. sph. solvent access : \t0.559\n",
            "Apolar alpha sphere proportion : \t0.147\n",
            "Hydrophobicity score:\t33.889\n",
            "Volume score: \t 3.333\n",
            "Polarity score:\t 3\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t45.455\n",
            "Alpha sphere density : \t2.835\n",
            "Cent. of mass - Alpha Sphere max dist: \t7.099\n",
            "Flexibility : \t0.045\n",
            "\n",
            "Pocket 20 :\n",
            "Score : \t-0.001\n",
            "Druggability Score : \t0.001\n",
            "Number of Alpha Spheres : \t21\n",
            "Total SASA : \t90.847\n",
            "Polar SASA : \t30.466\n",
            "Apolar SASA : \t60.381\n",
            "Volume : \t299.652\n",
            "Mean local hydrophobic density : \t9.000\n",
            "Mean alpha sphere radius :\t4.087\n",
            "Mean alp. sph. solvent access : \t0.603\n",
            "Apolar alpha sphere proportion : \t0.476\n",
            "Hydrophobicity score:\t25.750\n",
            "Volume score: \t 4.125\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t40.000\n",
            "Alpha sphere density : \t3.251\n",
            "Cent. of mass - Alpha Sphere max dist: \t7.450\n",
            "Flexibility : \t0.080\n",
            "\n",
            "Pocket 21 :\n",
            "Score : \t-0.002\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t23\n",
            "Total SASA : \t114.955\n",
            "Polar SASA : \t89.595\n",
            "Apolar SASA : \t25.360\n",
            "Volume : \t358.544\n",
            "Mean local hydrophobic density : \t0.000\n",
            "Mean alpha sphere radius :\t3.920\n",
            "Mean alp. sph. solvent access : \t0.533\n",
            "Apolar alpha sphere proportion : \t0.000\n",
            "Hydrophobicity score:\t-5.375\n",
            "Volume score: \t 4.375\n",
            "Polarity score:\t 7\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t72.727\n",
            "Alpha sphere density : \t4.083\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.764\n",
            "Flexibility : \t0.137\n",
            "\n",
            "Pocket 22 :\n",
            "Score : \t-0.013\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t18\n",
            "Total SASA : \t89.372\n",
            "Polar SASA : \t53.143\n",
            "Apolar SASA : \t36.229\n",
            "Volume : \t317.468\n",
            "Mean local hydrophobic density : \t3.000\n",
            "Mean alpha sphere radius :\t4.007\n",
            "Mean alp. sph. solvent access : \t0.567\n",
            "Apolar alpha sphere proportion : \t0.222\n",
            "Hydrophobicity score:\t26.444\n",
            "Volume score: \t 4.000\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t42.105\n",
            "Alpha sphere density : \t3.200\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.017\n",
            "Flexibility : \t0.158\n",
            "\n",
            "Pocket 23 :\n",
            "Score : \t-0.015\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t19\n",
            "Total SASA : \t98.373\n",
            "Polar SASA : \t62.145\n",
            "Apolar SASA : \t36.229\n",
            "Volume : \t333.904\n",
            "Mean local hydrophobic density : \t0.000\n",
            "Mean alpha sphere radius :\t4.018\n",
            "Mean alp. sph. solvent access : \t0.736\n",
            "Apolar alpha sphere proportion : \t0.053\n",
            "Hydrophobicity score:\t0.143\n",
            "Volume score: \t 4.143\n",
            "Polarity score:\t 6\n",
            "Charge score :\t -2\n",
            "Proportion of polar atoms: \t50.000\n",
            "Alpha sphere density : \t3.504\n",
            "Cent. of mass - Alpha Sphere max dist: \t6.972\n",
            "Flexibility : \t0.329\n",
            "\n",
            "Pocket 24 :\n",
            "Score : \t-0.015\n",
            "Druggability Score : \t0.035\n",
            "Number of Alpha Spheres : \t36\n",
            "Total SASA : \t105.121\n",
            "Polar SASA : \t50.956\n",
            "Apolar SASA : \t54.165\n",
            "Volume : \t314.308\n",
            "Mean local hydrophobic density : \t20.000\n",
            "Mean alpha sphere radius :\t3.935\n",
            "Mean alp. sph. solvent access : \t0.440\n",
            "Apolar alpha sphere proportion : \t0.583\n",
            "Hydrophobicity score:\t25.700\n",
            "Volume score: \t 4.000\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 2\n",
            "Proportion of polar atoms: \t41.667\n",
            "Alpha sphere density : \t2.846\n",
            "Cent. of mass - Alpha Sphere max dist: \t8.157\n",
            "Flexibility : \t0.076\n",
            "\n",
            "Pocket 25 :\n",
            "Score : \t-0.023\n",
            "Druggability Score : \t0.005\n",
            "Number of Alpha Spheres : \t26\n",
            "Total SASA : \t93.656\n",
            "Polar SASA : \t35.690\n",
            "Apolar SASA : \t57.966\n",
            "Volume : \t305.760\n",
            "Mean local hydrophobic density : \t11.000\n",
            "Mean alpha sphere radius :\t3.949\n",
            "Mean alp. sph. solvent access : \t0.631\n",
            "Apolar alpha sphere proportion : \t0.462\n",
            "Hydrophobicity score:\t24.429\n",
            "Volume score: \t 4.571\n",
            "Polarity score:\t 4\n",
            "Charge score :\t 1\n",
            "Proportion of polar atoms: \t34.783\n",
            "Alpha sphere density : \t2.826\n",
            "Cent. of mass - Alpha Sphere max dist: \t7.508\n",
            "Flexibility : \t0.129\n",
            "\n",
            "Pocket 26 :\n",
            "Score : \t-0.040\n",
            "Druggability Score : \t0.020\n",
            "Number of Alpha Spheres : \t55\n",
            "Total SASA : \t197.532\n",
            "Polar SASA : \t47.786\n",
            "Apolar SASA : \t149.746\n",
            "Volume : \t676.425\n",
            "Mean local hydrophobic density : \t13.375\n",
            "Mean alpha sphere radius :\t4.011\n",
            "Mean alp. sph. solvent access : \t0.557\n",
            "Apolar alpha sphere proportion : \t0.291\n",
            "Hydrophobicity score:\t14.467\n",
            "Volume score: \t 3.800\n",
            "Polarity score:\t 8\n",
            "Charge score :\t -2\n",
            "Proportion of polar atoms: \t34.146\n",
            "Alpha sphere density : \t4.940\n",
            "Cent. of mass - Alpha Sphere max dist: \t11.982\n",
            "Flexibility : \t0.043\n",
            "\n",
            "Pocket 27 :\n",
            "Score : \t-0.089\n",
            "Druggability Score : \t0.000\n",
            "Number of Alpha Spheres : \t22\n",
            "Total SASA : \t121.997\n",
            "Polar SASA : \t68.861\n",
            "Apolar SASA : \t53.136\n",
            "Volume : \t404.828\n",
            "Mean local hydrophobic density : \t4.000\n",
            "Mean alpha sphere radius :\t4.034\n",
            "Mean alp. sph. solvent access : \t0.488\n",
            "Apolar alpha sphere proportion : \t0.227\n",
            "Hydrophobicity score:\t-1.300\n",
            "Volume score: \t 3.700\n",
            "Polarity score:\t 8\n",
            "Charge score :\t 0\n",
            "Proportion of polar atoms: \t52.381\n",
            "Alpha sphere density : \t3.501\n",
            "Cent. of mass - Alpha Sphere max dist: \t7.081\n",
            "Flexibility : \t0.056\n",
            "\n",
            "Pocket 28 :\n",
            "Score : \t-0.116\n",
            "Druggability Score : \t0.001\n",
            "Number of Alpha Spheres : \t16\n",
            "Total SASA : \t81.657\n",
            "Polar SASA : \t32.144\n",
            "Apolar SASA : \t49.513\n",
            "Volume : \t263.256\n",
            "Mean local hydrophobic density : \t7.000\n",
            "Mean alpha sphere radius :\t4.122\n",
            "Mean alp. sph. solvent access : \t0.557\n",
            "Apolar alpha sphere proportion : \t0.500\n",
            "Hydrophobicity score:\t-11.833\n",
            "Volume score: \t 5.333\n",
            "Polarity score:\t 5\n",
            "Charge score :\t 3\n",
            "Proportion of polar atoms: \t28.571\n",
            "Alpha sphere density : \t1.896\n",
            "Cent. of mass - Alpha Sphere max dist: \t5.439\n",
            "Flexibility : \t0.071\n",
            "\n"
          ]
        }
      ],
      "source": [
        "# We'll have a look at the protein /content/pdb_files/1ajs_out\n",
        "\n",
        "fpocket_info_dir = '/content/pdb_files/1ajs_out/1ajs_info.txt'\n",
        "with open(fpocket_info_dir, 'r') as file:\n",
        "  for line in file:\n",
        "    print(line.strip())\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9J4EBjYQA7H5"
      },
      "source": [
        "Now, let's find the pocket with the highest druggability score in each of the target proteins and store its features in a DataFrame for training a model in the next step.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "6Hgdm5rOBCez"
      },
      "outputs": [],
      "source": [
        "import re\n",
        "\n",
        "def identify_most_druggable_pocket(pocket_df):\n",
        "  # Find the pocket with the highest druggability score\n",
        "  pocket_df['Druggability Score'] = pocket_df['Druggability Score'].astype(float)\n",
        "  best_pocket_df = pocket_df.loc[pocket_df['Druggability Score'].idxmax()]\n",
        "  best_pocket_df = pd.DataFrame(best_pocket_df).T\n",
        "  return best_pocket_df\n",
        "\n",
        "def extract_features(pocket_info):\n",
        "  pocket_data = []\n",
        "  # Read the file content line by line\n",
        "  with open(pocket_info, 'r') as file:\n",
        "    current_pocket_info = {}\n",
        "    for line in file:\n",
        "        if \"Pocket\" in line:\n",
        "            if current_pocket_info:\n",
        "                pocket_data.append(current_pocket_info)\n",
        "            current_pocket_info = {'Pocket': line.strip()}\n",
        "        else:\n",
        "            if ':' in line:\n",
        "                key, value = line.split(':')\n",
        "                current_pocket_info[key.strip()] = value.strip()\n",
        "\n",
        "    # Append the last pocket information\n",
        "    if current_pocket_info:\n",
        "        pocket_data.append(current_pocket_info)\n",
        "\n",
        "  # Convert the list of dictionaries to a DataFrame\n",
        "  pocket_df = pd.DataFrame(pocket_data)\n",
        "  pocket_df.drop(columns=['Pocket'], inplace=True)\n",
        "  return pocket_df\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "9ErvqlIWIWBE"
      },
      "outputs": [],
      "source": [
        "pocket_dataset = {}\n",
        "for protein in proteins_list:\n",
        "  pocket_info = f'{base_pdb_files}{protein}_out/{protein}_info.txt'\n",
        "  pocket_df = extract_features(pocket_info)\n",
        "  best_pocket_df = identify_most_druggable_pocket(pocket_df)\n",
        "  pocket_dataset[protein] = best_pocket_df\n",
        "\n",
        "# Combine all dataframes into one with a new column for the keys\n",
        "dataset_fpocket = pd.concat(pocket_dataset.values(), keys=pocket_dataset.keys()).reset_index(level=0).rename(columns={'level_0': 'Key'})\n",
        "dataset_fpocket.rename(columns={'Key': 'pdb code'}, inplace=True)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fULhrQH7DE00"
      },
      "source": [
        "Add the label's to the dataset"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "cUcVSO6PDIFc"
      },
      "outputs": [],
      "source": [
        "# # Set the key column as the index our dataframe from intial csv file with pdb code and labels and the dataframe we created in previous step\n",
        "dataset_fpocket.set_index('pdb code', inplace=True)\n",
        "# dataset.set_index('pdb code', inplace=True)\n",
        "\n",
        "# # Merge the dataframes on the index to create a datset\n",
        "# dataset_fpocket = dataset_fpocket.join(dataset, how='outer')\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vEgxB-Rh-PcC"
      },
      "source": [
        "### **ML model to classify the binding pockets** <a name=\"ml\"></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qv6wuZ9yAjgH"
      },
      "source": [
        "Here, we are using random forest algorithm to train our model. However, you are free to experiment with supervised model for classification of your choice."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "p9ZgK-ly-PMO",
        "outputId": "79652f49-1d49-4964-8b98-d29f635aae51"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Accuracy: 0.8695652173913043\n",
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.94      0.88      0.91        17\n",
            "           1       0.71      0.83      0.77         6\n",
            "\n",
            "    accuracy                           0.87        23\n",
            "   macro avg       0.83      0.86      0.84        23\n",
            "weighted avg       0.88      0.87      0.87        23\n",
            "\n"
          ]
        }
      ],
      "source": [
        "import pandas as pd\n",
        "from sklearn.metrics import classification_report, accuracy_score, roc_curve, roc_auc_score\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.preprocessing import LabelEncoder\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "\n",
        "# Separate features and labels\n",
        "X = dataset_fpocket\n",
        "y = labels\n",
        "label_encoder = LabelEncoder()\n",
        "y_encoded = label_encoder.fit_transform(y)\n",
        "\n",
        "# Split the data into training and testing sets\n",
        "X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.2, random_state=42)\n",
        "\n",
        "# Initialize the Random Forest model\n",
        "model = RandomForestClassifier(n_estimators=100, random_state=42)\n",
        "\n",
        "# Train the model\n",
        "model.fit(X_train, y_train)\n",
        "\n",
        "# Make predictions on the test set\n",
        "y_pred = model.predict(X_test)\n",
        "\n",
        "# Evaluate the model\n",
        "print(\"Accuracy:\", accuracy_score(y_test, y_pred))\n",
        "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "ma6qzU37AwD2",
        "outputId": "93973eea-e399-437b-cbda-fe909d7dbe16"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "\n",
        "# Calculate the ROC curve and AUC\n",
        "y_prob = model.predict_proba(X_test)[:, 1]\n",
        "fpr, tpr, thresholds = roc_curve(y_test, y_prob)\n",
        "roc_auc = roc_auc_score(y_test, y_prob)\n",
        "import matplotlib.pyplot as plt\n",
        "# Plot the ROC curve\n",
        "plt.figure()\n",
        "plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)\n",
        "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
        "plt.xlim([0.0, 1.0])\n",
        "plt.ylim([0.0, 1.05])\n",
        "plt.xlabel('False Positive Rate')\n",
        "plt.ylabel('True Positive Rate')\n",
        "plt.title('Receiver Operating Characteristic (ROC) Curve')\n",
        "plt.legend(loc=\"lower right\")\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "F73vTCjjZAia"
      },
      "source": [
        "The model achieved an accuracy of 86.96%. The precision, recall, and F1-score were 0.94, 0.88, and 0.91 for class 1(highly druggable), and 0.71, 0.83, and 0.77 for class 1(less druggable), indicating strong performance overall but slightly lower precision for class 1."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "itq48PcUVSSb"
      },
      "source": [
        "#### **Classifying Your Protein's Druggability**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5QWT-W-VEpZo"
      },
      "source": [
        "\n",
        "Let's find out if your protein is highly druggable or less druggable by following these steps. Assuming you already have the 3D structure of the protein in .pdb file format, we'll use the ML model to classify the protein pockets effectively.\n",
        "\n",
        "\n",
        "1. Run Fpocket to Identify the Pockets\n",
        "2. Idenitfy the pocket with highest druggable score\n",
        "3. Extract the features of most druggable feature in the target\n",
        "4. Use the above trained model to make a prediction\n",
        "\n",
        "In case you do not have the 3D structure of your protein, don't worry! You have two options:\n",
        "\n",
        "- Fetch the Structure Using PDB Code: You can use the `fetch_protein_structure` method defined above to fetch the structure using the PDB code of the protein.\n",
        "\n",
        "- Predict the Structure Using ESMfold: If you have the protein sequence, you can use ESMfold to obtain the structure of the protein. For more information, you can refer to the DeepChem tutorial:  [Protein Structure Prediction with ESMFold](https://github.com/deepchem/deepchem/blob/master/examples/tutorials/Protein_Structure_Prediction_with_ESMFold.ipynb).\n",
        "\n",
        "\n",
        "By following these steps, you can systematically determine the druggability of a protein pocket, combining advanced computational tools like Fpocket with the predictive power of machine learning. This process provides a robust method for identifying promising drug targets.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "iJfbBEXMAv45",
        "outputId": "67b14aea-6ec3-429f-fab6-6db68ccde93a"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Downloading PDB structure '1mbn'...\n",
            "['N']\n"
          ]
        }
      ],
      "source": [
        "fetch_protein_structure('1mbn', '/content/1mbn/')\n",
        "run_fpocket('/content/1mbn/1mbn.pdb')\n",
        "output_dir = '/content/1mbn'\n",
        "pdb_code = '1mbn'\n",
        "\n",
        "target_pocket_info = f'{output_dir}{pdb_code}_out/{protein}_info.txt'\n",
        "target_pocket_df = extract_features(pocket_info)\n",
        "best_pocket_df = identify_most_druggable_pocket(pocket_df)\n",
        "prediction = label_encoder.inverse_transform(model.predict(best_pocket_df))\n",
        "print(prediction)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XEqoKZ48WOqL"
      },
      "source": [
        "The predicted label is 'N' which  means protein '1mbn' isn't highly druggable. Hence, it shouldn't be used as a drug target."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gYedFeqtwvx1"
      },
      "source": [
        "### **ML Resources for Druggability Assessment**\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "06dybM7-4J-2"
      },
      "source": [
        "Here are some useful resources to help you understand the different ML methods mentioned in this tutorial:\n",
        "\n",
        "#### **Supervised Learning**\n",
        "\n",
        "##### **Regression**\n",
        "- [*Understanding* Decision Trees in Machine Learning](https://towardsdatascience.com/decision-trees-in-machine-learning-641b9c4e8052)\n",
        "- [Decision Tree Regression - An In-depth Guide](https://blog.paperspace.com/decision-trees/)\n",
        "- [Linear Regression: Introduction to Linear Regression](https://www.coursera.org/learn/ml-regression)\n",
        "- [Linear Regression Explained](https://aws.amazon.com/what-is/linear-regression/)\n",
        "- [Random Forest: Random Forest in Machine Learning](https://towardsdatascience.com/understanding-random-forest-58381e0602d2)\n",
        "- [Random Forest: A Complete Guide for Machine Learning](https://builtin.com/data-science/random-forest-algorithm#:~:text=Random%20forest%20is%20a%20machine,and%20how%20to%20use%20it.)\n",
        "\n",
        "##### **Classification**\n",
        "- [K-Nearest Neighbours Algorithm](https://www.ibm.com/topics/knn#:~:text=The%20k%2Dnearest%20neighbors%20KNN,used%20in%20machine%20learning%20today.)\n",
        "- [Support Vector Machine (SVM): Introduction to Support Vector Machines](https://www.spiceworks.com/tech/big-data/articles/what-is-support-vector-machine/)\n",
        "- [Natural Language Processing (NLP): NLP Overview](https://builtin.com/data-science/introduction-nlp)\n",
        "- [Getting Started with NLP](https://www.kaggle.com/code/jhoward/getting-started-with-nlp-for-absolute-beginners)\n",
        "- [Bayesian Networks: Introduction to Bayesian Networks](https://thedecisionlab.com/reference-guide/statistics/bayesian-network)\n",
        "\n",
        "#### **Unsupervised Learning**\n",
        "\n",
        "##### **Clustering**\n",
        "- [K-Means Clustering: K-Means Clustering Algorithm Explained](https://towardsdatascience.com/k-means-clustering-algorithm-applications-evaluation-methods-and-drawbacks-aa03e644b48a)\n",
        "- [K-Means Clustering with Python](https://scikit-learn.org/stable/modules/clustering.html#k-means)\n",
        "- [Hierarchical Clustering: Understanding Hierarchical Clustering](https://towardsdatascience.com/understanding-the-concept-of-hierarchical-clustering-technique-c6e8243758ec)\n",
        "- [Hidden Markov Model (HMM): Introduction to Hidden Markov Models](https://www.theaidream.com/post/introduction-to-hidden-markov-model-hmm-and-its-application-in-stock-market-analysis)\n",
        "\n",
        "Feel free to explore these resources as you progress through the notebook to deepen your understanding of the ML methods used in druggability assessment.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Op5VLf0_3PIM"
      },
      "source": [
        "## References\n",
        "\n",
        "1. Hopkins, A. L., & Groom, C. R. (2002). The druggable genome. *Nature Reviews Drug Discovery*, 1(9), 727-730. DOI: [10.1038/nrd892](https://doi.org/10.1038/nrd892)\n",
        "\n",
        "2. Yu, L., Xue, L., Liu, F., Li, Y., Jing, R., & Luo, J. (2022). The applications of deep learning algorithms on in silico druggable proteins identification. Journal of Advanced Research, 41, 219-231. DOI: [10.1016/j.jare.2022.01.009](https://doi.org/10.1016/j.jare.2022.01.009)\n",
        "\n",
        "3. Hajduk, P. J., Huth, J. R., & Tse, C. (2005). Predicting protein druggability. *Drug Discovery Today*, 10(23-24), 1675-1682. DOI: [10.1016/S1359-6446(05)03624-2](https://doi.org/10.1016/S1359-6446(05)03624-2)\n",
        "\n",
        "4. Halgren, T. A. (2009). Identifying and characterizing binding sites and assessing druggability. *Journal of Chemical Information and Modeling*, 49(2), 377-389. DOI: [10.1021/ci800324m](https://doi.org/10.1021/ci800324m)\n",
        "\n",
        "5. Peters, J. U. (2013). Polypharmacology–foe or friend? *Journal of Medicinal Chemistry*, 56(22), 8955-8971. DOI: [10.1021/jm400856t](https://doi.org/10.1021/jm400856t)\n",
        "\n",
        "6. Ashley, E. A. (2016). Towards precision medicine. *Nature Reviews Genetics*, 17(9), 507-522. DOI: [10.1038/nrg.2016.86](https://doi.org/10.1038/nrg.2016.86)\n",
        "\n",
        "7. Agoni, C., Olotu, F.A., Ramharack, P. et al. Druggability and drug-likeness concepts in drug design: are biomodelling and predictive tools having their say?. J Mol Model 26, 120 (2020). DOI: [10.1007/s00894-020-04385-6](https://doi.org/10.1007/s00894-020-04385-6)\n",
        "\n",
        "8. Abi Hussein H, Geneix C, Petitjean M, Borrel A, Flatters D, Camproux AC. Global vision of druggability issues: applications and perspectives. Drug Discov Today. 22, 404–415 (2017)\n",
        "\n",
        "9. Arrowsmith, J. Phase III and submission failures: 2007-2010. Nature Reviews Drug Discovery. 10(2), 1-2 (2011)\n",
        "\n",
        "10. Excelra. (2024). Identifying Druggable Therapeutic Targets: Unveiling Promising Avenues in Drug Discovery. *Excelra White Paper*. Retrieved from [https://www.excelra.com/whitepaper/identifying-druggable-therapeutic-targets-unveiling-promising-avenues-in-drug-discovery/](https://www.excelra.com/whitepaper/identifying-druggable-therapeutic-targets-unveiling-promising-avenues-in-drug-discovery/)\n",
        "\n",
        "11. Aguti R, Gardini E, Bertazzo M, Decherchi S and Cavalli A (2022) Probabilistic Pocket Druggability Prediction via One-Class Learning. Front. Pharmacol. 13:870479. DOI: [10.3389/fphar.2022.870479]((https://doi.org/10.3389/fphar.2022.870479))\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FknVpztBYsFp"
      },
      "source": [
        "# Congratulations! Time to join the Community!\n",
        "Congratulations on completing this tutorial notebook! If you enjoyed working through the tutorial, and want to continue working with DeepChem, we encourage you to finish the rest of the tutorials in this series. You can also help the DeepChem community in the following ways:"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0BntFVZSYtrq"
      },
      "source": [
        "## Star DeepChem on [GitHub](https://github.com/deepchem/deepchem)\n",
        "This helps build awareness of the DeepChem project and the tools for open source drug discovery that we're trying to build."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bVlTO4A9YxE7"
      },
      "source": [
        "## Join the DeepChem Discord\n",
        "The DeepChem [Discord](https://discord.gg/cGzwCdrUqS) hosts a number of scientists, developers, and enthusiasts interested in deep learning for the life sciences. Join the conversation!"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WTNCXTa9g7SN"
      },
      "source": [
        "## Citing this Tutorial\n",
        "\n",
        "If you found this tutorial useful, please consider citing it as:\n",
        "\n",
        "```\n",
        "@manual{Bioinformatics,\n",
        " title={Druggability Assessment with Fpocket and Machine Learning},\n",
        " organization={DeepChem},\n",
        " author={Yadav, Anamika },\n",
        " howpublished = {\\url{https://github.com/deepchem/deepchem/blob/master/examples/tutorials/Druggablity_Assessment_with_Fpocket_and_Machine_Learning.ipynb}},\n",
        " year={2024},\n",
        "}\n",
        "```"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
